package org.consenlabs.tokencore.wallet.address;

import com.google.common.base.Strings;

import org.bitcoinj.core.NetworkParameters;
import org.bitcoinj.params.MainNetParams;
import org.bitcoinj.params.TestNet3Params;
import org.consenlabs.tokencore.wallet.model.Messages;
import org.consenlabs.tokencore.wallet.model.Metadata;
import org.consenlabs.tokencore.wallet.model.Network;
import org.consenlabs.tokencore.wallet.model.TokenException;
import org.consenlabs.tokencore.wallet.model.ChainId;
import org.consenlabs.tokencore.wallet.model.ChainType;

public class AddressCreatorManager {

  public static AddressCreator getInstance(String type, boolean isMainnet, String segWit) {
    if (ChainType.ETHEREUM.equals(type)) {
      return new EthereumAddressCreator();
    } else if (ChainType.BITCOIN.equals(type)) {

      NetworkParameters network = isMainnet ? MainNetParams.get() : TestNet3Params.get();
      if (Metadata.P2WPKH.equals(segWit)) {
        return new SegWitBitcoinAddressCreator(network);
      }
      return new BitcoinAddressCreator(network);
    } else {
      throw new TokenException(Messages.WALLET_INVALID_TYPE);
    }
  }

}