module IEX
  module Endpoints
    module RefData
      def ref_data_isin(isins, options = {})
        response = get('ref-data/isin', { token: publishable_token, isin: Array(isins).join(',') }.merge(options))

        if response.is_a?(Hash) # mapped option was set
          response.transform_values do |rows|
            rows&.map { |row| IEX::Resources::Symbol.new(row) }
          end
        else
          response.map { |row| IEX::Resources::Symbol.new(row) }
        end
      end

      def ref_data_symbols(options = {})
        response = get('ref-data/symbols', { token: publishable_token }.merge(options))
        response.map { |row| IEX::Resources::Symbols.new(row) }
      end

      def ref_data_symbols_for_exchange(exchange, options = {})
        response = get("ref-data/exchange/#{exchange}/symbols", { token: publishable_token }.merge(options))
        response.map { |row| IEX::Resources::Symbols.new(row) }
      end

      def ref_data_symbols_for_region(region, options = {})
        response = get("ref-data/region/#{region}/symbols", { token: publishable_token }.merge(options))
        response.map { |row| IEX::Resources::Symbols.new(row) }
      end
    end
  end
end
