require 'cash_addr'

module CryptocoinPayable
  module Adapters
    class BitcoinCash < Bitcoin
      def self.coin_symbol
        'BCH'
      end

      def fetch_transactions(address)
        raise NetworkNotSupported if CryptocoinPayable.configuration.testnet

        url = "https://#{prefix}blockexplorer.com/api/txs/?address=#{legacy_address(address)}"
        parse_block_explorer_transactions(get_request(url).body, address)
      end

      def create_address(id)
        CashAddr::Converter.to_cash_address(super)
      end

      private

      def legacy_address(address)
        CashAddr::Converter.to_legacy_address(address)
      rescue CashAddr::InvalidAddress
        raise ApiError
      end

      def prefix
        CryptocoinPayable.configuration.testnet ? 'bchtest.' : 'bitcoincash.'
      end
    end
  end
end