=begin
#CoinAPI Market Data 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 OrderBookApi
    attr_accessor :api_client

    def initialize(api_client = ApiClient.default)
      @api_client = api_client
    end
    # Get current order book
    # Retrieves the current order book for the specified symbol.
    # @param symbol_id [String] The symbol ID (from the Metadata -&gt; Symbols)
    # @param [Hash] opts the optional parameters
    # @option opts [Integer] :limit_levels The maximum number of levels to include in the response.
    # @return [V1OrderBookBase]
    def v1_orderbooks_symbol_id_current_get(symbol_id, opts = {})
      data, _status_code, _headers = v1_orderbooks_symbol_id_current_get_with_http_info(symbol_id, opts)
      data
    end

    # Get current order book
    # Retrieves the current order book for the specified symbol.
    # @param symbol_id [String] The symbol ID (from the Metadata -&gt; Symbols)
    # @param [Hash] opts the optional parameters
    # @option opts [Integer] :limit_levels The maximum number of levels to include in the response.
    # @return [Array<(V1OrderBookBase, Integer, Hash)>] V1OrderBookBase data, response status code and response headers
    def v1_orderbooks_symbol_id_current_get_with_http_info(symbol_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: OrderBookApi.v1_orderbooks_symbol_id_current_get ...'
      end
      # verify the required parameter 'symbol_id' is set
      if @api_client.config.client_side_validation && symbol_id.nil?
        fail ArgumentError, "Missing the required parameter 'symbol_id' when calling OrderBookApi.v1_orderbooks_symbol_id_current_get"
      end
      # resource path
      local_var_path = '/v1/orderbooks/{symbol_id}/current'.sub('{' + 'symbol_id' + '}', CGI.escape(symbol_id.to_s))

      # query parameters
      query_params = opts[:query_params] || {}
      query_params[:'limit_levels'] = opts[:'limit_levels'] if !opts[:'limit_levels'].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] || 'V1OrderBookBase'

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

      new_options = opts.merge(
        :operation => :"OrderBookApi.v1_orderbooks_symbol_id_current_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: OrderBookApi#v1_orderbooks_symbol_id_current_get\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Current depth of the order book
    # Retrieves the current depth of the order book for the specified symbol.
    # @param symbol_id [String] The symbol ID (from the Metadata -&gt; Symbols)
    # @param [Hash] opts the optional parameters
    # @option opts [Integer] :limit_levels The maximum number of levels to include in the response.
    # @return [V1OrderBookDepth]
    def v1_orderbooks_symbol_id_depth_current_get(symbol_id, opts = {})
      data, _status_code, _headers = v1_orderbooks_symbol_id_depth_current_get_with_http_info(symbol_id, opts)
      data
    end

    # Current depth of the order book
    # Retrieves the current depth of the order book for the specified symbol.
    # @param symbol_id [String] The symbol ID (from the Metadata -&gt; Symbols)
    # @param [Hash] opts the optional parameters
    # @option opts [Integer] :limit_levels The maximum number of levels to include in the response.
    # @return [Array<(V1OrderBookDepth, Integer, Hash)>] V1OrderBookDepth data, response status code and response headers
    def v1_orderbooks_symbol_id_depth_current_get_with_http_info(symbol_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: OrderBookApi.v1_orderbooks_symbol_id_depth_current_get ...'
      end
      # verify the required parameter 'symbol_id' is set
      if @api_client.config.client_side_validation && symbol_id.nil?
        fail ArgumentError, "Missing the required parameter 'symbol_id' when calling OrderBookApi.v1_orderbooks_symbol_id_depth_current_get"
      end
      # resource path
      local_var_path = '/v1/orderbooks/{symbol_id}/depth/current'.sub('{' + 'symbol_id' + '}', CGI.escape(symbol_id.to_s))

      # query parameters
      query_params = opts[:query_params] || {}
      query_params[:'limit_levels'] = opts[:'limit_levels'] if !opts[:'limit_levels'].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] || 'V1OrderBookDepth'

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

      new_options = opts.merge(
        :operation => :"OrderBookApi.v1_orderbooks_symbol_id_depth_current_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: OrderBookApi#v1_orderbooks_symbol_id_depth_current_get\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Historical data
    # Get historical order book snapshots for a specific symbol within time range, returned in time ascending order.              :::info The historical order book data via the REST API is currently limited by a number of updates and to the maximum number of 20 levels. :::  :::warning The 'time_start' and 'time_end' parameters must be from the same day as this endpoint provides intraday data only for specific day. Please use the 'date' parameter instead for querying data for a specific day without filter. :::
    # @param symbol_id [String] Symbol identifier for requested timeseries (from the Metadata -&gt; Symbols)
    # @param [Hash] opts the optional parameters
    # @option opts [String] :date Date in ISO 8601, returned data is for the whole given day (preferred method, required if &#39;time_start&#39; is not provided)
    # @option opts [String] :time_start Starting time in ISO 8601 (deprecated, use &#39;date&#39; instead)
    # @option opts [String] :time_end Timeseries ending time in ISO 8601 (deprecated, use &#39;date&#39; instead)
    # @option opts [Integer] :limit Amount of items to return (optional, minimum is 1, maximum is 100000, default value is 100, if the parameter is used then every 100 output items are counted as one request) (default to 100)
    # @option opts [Integer] :limit_levels Maximum amount of levels from each side of the book to include in response (optional)
    # @return [Array<V1OrderBook>]
    def v1_orderbooks_symbol_id_history_get(symbol_id, opts = {})
      data, _status_code, _headers = v1_orderbooks_symbol_id_history_get_with_http_info(symbol_id, opts)
      data
    end

    # Historical data
    # Get historical order book snapshots for a specific symbol within time range, returned in time ascending order.              :::info The historical order book data via the REST API is currently limited by a number of updates and to the maximum number of 20 levels. :::  :::warning The &#39;time_start&#39; and &#39;time_end&#39; parameters must be from the same day as this endpoint provides intraday data only for specific day. Please use the &#39;date&#39; parameter instead for querying data for a specific day without filter. :::
    # @param symbol_id [String] Symbol identifier for requested timeseries (from the Metadata -&gt; Symbols)
    # @param [Hash] opts the optional parameters
    # @option opts [String] :date Date in ISO 8601, returned data is for the whole given day (preferred method, required if &#39;time_start&#39; is not provided)
    # @option opts [String] :time_start Starting time in ISO 8601 (deprecated, use &#39;date&#39; instead)
    # @option opts [String] :time_end Timeseries ending time in ISO 8601 (deprecated, use &#39;date&#39; instead)
    # @option opts [Integer] :limit Amount of items to return (optional, minimum is 1, maximum is 100000, default value is 100, if the parameter is used then every 100 output items are counted as one request) (default to 100)
    # @option opts [Integer] :limit_levels Maximum amount of levels from each side of the book to include in response (optional)
    # @return [Array<(Array<V1OrderBook>, Integer, Hash)>] Array<V1OrderBook> data, response status code and response headers
    def v1_orderbooks_symbol_id_history_get_with_http_info(symbol_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: OrderBookApi.v1_orderbooks_symbol_id_history_get ...'
      end
      # verify the required parameter 'symbol_id' is set
      if @api_client.config.client_side_validation && symbol_id.nil?
        fail ArgumentError, "Missing the required parameter 'symbol_id' when calling OrderBookApi.v1_orderbooks_symbol_id_history_get"
      end
      # resource path
      local_var_path = '/v1/orderbooks/{symbol_id}/history'.sub('{' + 'symbol_id' + '}', CGI.escape(symbol_id.to_s))

      # query parameters
      query_params = opts[:query_params] || {}
      query_params[:'date'] = opts[:'date'] if !opts[:'date'].nil?
      query_params[:'time_start'] = opts[:'time_start'] if !opts[:'time_start'].nil?
      query_params[:'time_end'] = opts[:'time_end'] if !opts[:'time_end'].nil?
      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
      query_params[:'limit_levels'] = opts[:'limit_levels'] if !opts[:'limit_levels'].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<V1OrderBook>'

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

      new_options = opts.merge(
        :operation => :"OrderBookApi.v1_orderbooks_symbol_id_history_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: OrderBookApi#v1_orderbooks_symbol_id_history_get\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Latest data
    # Get latest order book snapshots for a specific symbol, returned in time descending order.              :::info The historical order book data via the REST API is currently limited by a number of updates and to the maximum number of 20 levels. :::
    # @param symbol_id [String] Symbol identifier of requested timeseries (from the Metadata -&gt; Symbols)
    # @param [Hash] opts the optional parameters
    # @option opts [Integer] :limit Amount of items to return (optional, mininum is 1, maximum is 100000, default value is 100, if the parameter is used then every 100 output items are counted as one request) (default to 100)
    # @option opts [Integer] :limit_levels Maximum amount of levels from each side of the book to include in response (optional)
    # @return [Array<V1OrderBook>]
    def v1_orderbooks_symbol_id_latest_get(symbol_id, opts = {})
      data, _status_code, _headers = v1_orderbooks_symbol_id_latest_get_with_http_info(symbol_id, opts)
      data
    end

    # Latest data
    # Get latest order book snapshots for a specific symbol, returned in time descending order.              :::info The historical order book data via the REST API is currently limited by a number of updates and to the maximum number of 20 levels. :::
    # @param symbol_id [String] Symbol identifier of requested timeseries (from the Metadata -&gt; Symbols)
    # @param [Hash] opts the optional parameters
    # @option opts [Integer] :limit Amount of items to return (optional, mininum is 1, maximum is 100000, default value is 100, if the parameter is used then every 100 output items are counted as one request) (default to 100)
    # @option opts [Integer] :limit_levels Maximum amount of levels from each side of the book to include in response (optional)
    # @return [Array<(Array<V1OrderBook>, Integer, Hash)>] Array<V1OrderBook> data, response status code and response headers
    def v1_orderbooks_symbol_id_latest_get_with_http_info(symbol_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: OrderBookApi.v1_orderbooks_symbol_id_latest_get ...'
      end
      # verify the required parameter 'symbol_id' is set
      if @api_client.config.client_side_validation && symbol_id.nil?
        fail ArgumentError, "Missing the required parameter 'symbol_id' when calling OrderBookApi.v1_orderbooks_symbol_id_latest_get"
      end
      # resource path
      local_var_path = '/v1/orderbooks/{symbol_id}/latest'.sub('{' + 'symbol_id' + '}', CGI.escape(symbol_id.to_s))

      # query parameters
      query_params = opts[:query_params] || {}
      query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
      query_params[:'limit_levels'] = opts[:'limit_levels'] if !opts[:'limit_levels'].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<V1OrderBook>'

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

      new_options = opts.merge(
        :operation => :"OrderBookApi.v1_orderbooks_symbol_id_latest_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: OrderBookApi#v1_orderbooks_symbol_id_latest_get\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end
  end
end
