=begin
#CoinAPI Indexes REST API

#No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)

The version of the OpenAPI document: v1
Contact: support@apibricks.io
Generated by: https://openapi-generator.tech
Generator version: 7.14.0

=end

require 'cgi'

module OpenapiClient
  class MetadataApi
    attr_accessor :api_client

    def initialize(api_client = ApiClient.default)
      @api_client = api_client
    end
    # List all exchanges by exchange_id
    # @param exchange_id [String] The ID of the exchange.
    # @param [Hash] opts the optional parameters
    # @return [Array<MetadataExchange>]
    def api_metadata_exchanges_exchange_id_get(exchange_id, opts = {})
      data, _status_code, _headers = api_metadata_exchanges_exchange_id_get_with_http_info(exchange_id, opts)
      data
    end

    # List all exchanges by exchange_id
    # @param exchange_id [String] The ID of the exchange.
    # @param [Hash] opts the optional parameters
    # @return [Array<(Array<MetadataExchange>, Integer, Hash)>] Array<MetadataExchange> data, response status code and response headers
    def api_metadata_exchanges_exchange_id_get_with_http_info(exchange_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: MetadataApi.api_metadata_exchanges_exchange_id_get ...'
      end
      # verify the required parameter 'exchange_id' is set
      if @api_client.config.client_side_validation && exchange_id.nil?
        fail ArgumentError, "Missing the required parameter 'exchange_id' when calling MetadataApi.api_metadata_exchanges_exchange_id_get"
      end
      # resource path
      local_var_path = '/api/metadata/exchanges/{exchange_id}'.sub('{' + 'exchange_id' + '}', CGI.escape(exchange_id.to_s))

      # query parameters
      query_params = opts[:query_params] || {}

      # header parameters
      header_params = opts[:header_params] || {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['text/plain', 'application/json', 'text/json', 'application/x-msgpack']) unless header_params['Accept']

      # form parameters
      form_params = opts[:form_params] || {}

      # http body (model)
      post_body = opts[:debug_body]

      # return_type
      return_type = opts[:debug_return_type] || 'Array<MetadataExchange>'

      # auth_names
      auth_names = opts[:debug_auth_names] || ['APIKey', 'JWT']

      new_options = opts.merge(
        :operation => :"MetadataApi.api_metadata_exchanges_exchange_id_get",
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => return_type
      )

      data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: MetadataApi#api_metadata_exchanges_exchange_id_get\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # List all exchanges
    # Get a detailed list of exchanges provided by the system.              :::info Properties of the output are providing aggregated information from across all symbols related to the specific exchange. If you need to calculate your aggregation (e.g., limiting only the particular type of symbols), you should use /v1/symbols endpoint as a data source. :::
    # @param [Hash] opts the optional parameters
    # @option opts [String] :filter_exchange_id Comma or semicolon delimited exchange identifiers used to filter response. (optional, eg. &#x60;BITSTAMP;GEMINI&#x60;)
    # @return [Array<MetadataExchange>]
    def api_metadata_exchanges_get(opts = {})
      data, _status_code, _headers = api_metadata_exchanges_get_with_http_info(opts)
      data
    end

    # List all exchanges
    # Get a detailed list of exchanges provided by the system.              :::info Properties of the output are providing aggregated information from across all symbols related to the specific exchange. If you need to calculate your aggregation (e.g., limiting only the particular type of symbols), you should use /v1/symbols endpoint as a data source. :::
    # @param [Hash] opts the optional parameters
    # @option opts [String] :filter_exchange_id Comma or semicolon delimited exchange identifiers used to filter response. (optional, eg. &#x60;BITSTAMP;GEMINI&#x60;)
    # @return [Array<(Array<MetadataExchange>, Integer, Hash)>] Array<MetadataExchange> data, response status code and response headers
    def api_metadata_exchanges_get_with_http_info(opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: MetadataApi.api_metadata_exchanges_get ...'
      end
      # resource path
      local_var_path = '/api/metadata/exchanges'

      # query parameters
      query_params = opts[:query_params] || {}
      query_params[:'filter_exchange_id'] = opts[:'filter_exchange_id'] if !opts[:'filter_exchange_id'].nil?

      # header parameters
      header_params = opts[:header_params] || {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['text/plain', 'application/json', 'text/json', 'application/x-msgpack']) unless header_params['Accept']

      # form parameters
      form_params = opts[:form_params] || {}

      # http body (model)
      post_body = opts[:debug_body]

      # return_type
      return_type = opts[:debug_return_type] || 'Array<MetadataExchange>'

      # auth_names
      auth_names = opts[:debug_auth_names] || ['APIKey', 'JWT']

      new_options = opts.merge(
        :operation => :"MetadataApi.api_metadata_exchanges_get",
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => return_type
      )

      data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: MetadataApi#api_metadata_exchanges_get\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end
  end
end
