=begin
#Payment Gateway API Specification.

#Payment Gateway API for payment processing. Version 6.4.0.20181018.001 

OpenAPI spec version: 6.4.0.20181018.001

Generated by: https://openapi-generator.tech
OpenAPI Generator version: unset

=end

require 'uri'

module OpenapiClient
  class OrderApi
    attr_accessor :api_client

    def initialize(api_client = ApiClient.default)
      @api_client = api_client
    end
    # Retrieve the state of an order
    # Use this query to get the current state of an existing order.
    # @param content_type content type
    # @param client_request_id A client-generated ID for request tracking and signature creation, unique per request.  This is also used for idempotency control. We recommend 128-bit UUID format.
    # @param api_key 
    # @param timestamp Epoch timestamp in milliseconds in the request from a client system. Used for Message Signature generation and time limit (5 mins).
    # @param order_id Gateway order identifier as returned in the parameter orderId
    # @param [Hash] opts the optional parameters
    # @option opts [String] :message_signature Used to ensure the request has not been tampered with during transmission. The Message-Signature is the Base64 encoded HMAC hash (SHA256  algorithm with the API Secret as the key.) For more information, refer to the supporting documentation on the Developer Portal.
    # @option opts [String] :region The region where client wants to process the transaction
    # @option opts [String] :store_id An optional outlet ID for clients that support multiple stores in the same developer app
    # @return [OrderResponse]
    def order_inquiry(content_type, client_request_id, api_key, timestamp, order_id, opts = {})
      data, _status_code, _headers = order_inquiry_with_http_info(content_type, client_request_id, api_key, timestamp, order_id, opts)
      data
    end

    # Retrieve the state of an order
    # Use this query to get the current state of an existing order.
    # @param content_type content type
    # @param client_request_id A client-generated ID for request tracking and signature creation, unique per request.  This is also used for idempotency control. We recommend 128-bit UUID format.
    # @param api_key 
    # @param timestamp Epoch timestamp in milliseconds in the request from a client system. Used for Message Signature generation and time limit (5 mins).
    # @param order_id Gateway order identifier as returned in the parameter orderId
    # @param [Hash] opts the optional parameters
    # @option opts [String] :message_signature Used to ensure the request has not been tampered with during transmission. The Message-Signature is the Base64 encoded HMAC hash (SHA256  algorithm with the API Secret as the key.) For more information, refer to the supporting documentation on the Developer Portal.
    # @option opts [String] :region The region where client wants to process the transaction
    # @option opts [String] :store_id An optional outlet ID for clients that support multiple stores in the same developer app
    # @return [Array<(OrderResponse, Fixnum, Hash)>] OrderResponse data, response status code and response headers
    def order_inquiry_with_http_info(content_type, client_request_id, api_key, timestamp, order_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: OrderApi.order_inquiry ...'
      end
      # verify the required parameter 'content_type' is set
      if @api_client.config.client_side_validation && content_type.nil?
        fail ArgumentError, "Missing the required parameter 'content_type' when calling OrderApi.order_inquiry"
      end
      # verify enum value
      if @api_client.config.client_side_validation && !['application/json'].include?(content_type)
        fail ArgumentError, "invalid value for 'content_type', must be one of application/json"
      end
      # verify the required parameter 'client_request_id' is set
      if @api_client.config.client_side_validation && client_request_id.nil?
        fail ArgumentError, "Missing the required parameter 'client_request_id' when calling OrderApi.order_inquiry"
      end
      # verify the required parameter 'api_key' is set
      if @api_client.config.client_side_validation && api_key.nil?
        fail ArgumentError, "Missing the required parameter 'api_key' when calling OrderApi.order_inquiry"
      end
      # verify the required parameter 'timestamp' is set
      if @api_client.config.client_side_validation && timestamp.nil?
        fail ArgumentError, "Missing the required parameter 'timestamp' when calling OrderApi.order_inquiry"
      end
      # verify the required parameter 'order_id' is set
      if @api_client.config.client_side_validation && order_id.nil?
        fail ArgumentError, "Missing the required parameter 'order_id' when calling OrderApi.order_inquiry"
      end
      # resource path
      local_var_path = '/v1/orders/{order-id}'.sub('{' + 'order-id' + '}', order_id.to_s)

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

      # header parameters
      header_params = {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
      # header_params[:'Content-Type'] = content_type
      header_params[:'Client-Request-Id'] = client_request_id
      header_params[:'Api-Key'] = api_key
      header_params[:'Timestamp'] = timestamp
      header_params[:'Message-Signature'] = opts[:'message_signature'] if !opts[:'message_signature'].nil?
      header_params[:'Region'] = opts[:'region'] if !opts[:'region'].nil?

      # form parameters
      form_params = {}

      # http body (model)
      post_body = nil
      auth_names = []
      data, status_code, headers = @api_client.call_api(:GET, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'OrderResponse',
        :default_error_type => 'ErrorResponse')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: OrderApi#order_inquiry\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Capture/complete an already existing order.
    # Use this to capture/complete an order. Postauths and partial postauths are allowed.
    # @param content_type content type
    # @param client_request_id A client-generated ID for request tracking and signature creation, unique per request.  This is also used for idempotency control. We recommend 128-bit UUID format.
    # @param api_key 
    # @param timestamp Epoch timestamp in milliseconds in the request from a client system. Used for Message Signature generation and time limit (5 mins).
    # @param order_id Gateway order identifier as returned in the parameter orderId
    # @param secondary_transaction 
    # @param [Hash] opts the optional parameters
    # @option opts [String] :message_signature Used to ensure the request has not been tampered with during transmission. The Message-Signature is the Base64 encoded HMAC hash (SHA256  algorithm with the API Secret as the key.) For more information, refer to the supporting documentation on the Developer Portal.
    # @option opts [String] :region The region where client wants to process the transaction
    # @option opts [String] :store_id An optional outlet ID for clients that support multiple stores in the same developer app
    # @return [TransactionResponse]
    def order_post_auth(content_type, client_request_id, api_key, timestamp, order_id, secondary_transaction, opts = {})
      data, _status_code, _headers = order_post_auth_with_http_info(content_type, client_request_id, api_key, timestamp, order_id, secondary_transaction, opts)
      data
    end

    # Capture/complete an already existing order.
    # Use this to capture/complete an order. Postauths and partial postauths are allowed.
    # @param content_type content type
    # @param client_request_id A client-generated ID for request tracking and signature creation, unique per request.  This is also used for idempotency control. We recommend 128-bit UUID format.
    # @param api_key 
    # @param timestamp Epoch timestamp in milliseconds in the request from a client system. Used for Message Signature generation and time limit (5 mins).
    # @param order_id Gateway order identifier as returned in the parameter orderId
    # @param secondary_transaction 
    # @param [Hash] opts the optional parameters
    # @option opts [String] :message_signature Used to ensure the request has not been tampered with during transmission. The Message-Signature is the Base64 encoded HMAC hash (SHA256  algorithm with the API Secret as the key.) For more information, refer to the supporting documentation on the Developer Portal.
    # @option opts [String] :region The region where client wants to process the transaction
    # @option opts [String] :store_id An optional outlet ID for clients that support multiple stores in the same developer app
    # @return [Array<(TransactionResponse, Fixnum, Hash)>] TransactionResponse data, response status code and response headers
    def order_post_auth_with_http_info(content_type, client_request_id, api_key, timestamp, order_id, secondary_transaction, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: OrderApi.order_post_auth ...'
      end
      # verify the required parameter 'content_type' is set
      if @api_client.config.client_side_validation && content_type.nil?
        fail ArgumentError, "Missing the required parameter 'content_type' when calling OrderApi.order_post_auth"
      end
      # verify enum value
      if @api_client.config.client_side_validation && !['application/json'].include?(content_type)
        fail ArgumentError, "invalid value for 'content_type', must be one of application/json"
      end
      # verify the required parameter 'client_request_id' is set
      if @api_client.config.client_side_validation && client_request_id.nil?
        fail ArgumentError, "Missing the required parameter 'client_request_id' when calling OrderApi.order_post_auth"
      end
      # verify the required parameter 'api_key' is set
      if @api_client.config.client_side_validation && api_key.nil?
        fail ArgumentError, "Missing the required parameter 'api_key' when calling OrderApi.order_post_auth"
      end
      # verify the required parameter 'timestamp' is set
      if @api_client.config.client_side_validation && timestamp.nil?
        fail ArgumentError, "Missing the required parameter 'timestamp' when calling OrderApi.order_post_auth"
      end
      # verify the required parameter 'order_id' is set
      if @api_client.config.client_side_validation && order_id.nil?
        fail ArgumentError, "Missing the required parameter 'order_id' when calling OrderApi.order_post_auth"
      end
      # verify the required parameter 'secondary_transaction' is set
      if @api_client.config.client_side_validation && secondary_transaction.nil?
        fail ArgumentError, "Missing the required parameter 'secondary_transaction' when calling OrderApi.order_post_auth"
      end
      # resource path
      local_var_path = '/v1/orders/{order-id}/postauth'.sub('{' + 'order-id' + '}', order_id.to_s)

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

      # header parameters
      header_params = {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
      # HTTP header 'Content-Type'
      # header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
      # header_params[:'Content-Type'] = content_type
      header_params[:'Client-Request-Id'] = client_request_id
      header_params[:'Api-Key'] = api_key
      header_params[:'Timestamp'] = timestamp
      header_params[:'Message-Signature'] = opts[:'message_signature'] if !opts[:'message_signature'].nil?
      header_params[:'Region'] = opts[:'region'] if !opts[:'region'].nil?

      # form parameters
      form_params = {}

      # http body (model)
      post_body = @api_client.object_to_http_body(secondary_transaction)
      auth_names = []
      data, status_code, headers = @api_client.call_api(:POST, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'TransactionResponse',
        :default_error_type => 'ErrorResponse',
        :error_type => 'TransactionErrorResponse')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: OrderApi#order_post_auth\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Return/refund an order.
    # Use this for Returns of an existing order. Partial Returns are allowed.
    # @param content_type content type
    # @param client_request_id A client-generated ID for request tracking and signature creation, unique per request.  This is also used for idempotency control. We recommend 128-bit UUID format.
    # @param api_key 
    # @param timestamp Epoch timestamp in milliseconds in the request from a client system. Used for Message Signature generation and time limit (5 mins).
    # @param order_id Gateway order identifier as returned in the parameter orderId
    # @param secondary_transaction 
    # @param [Hash] opts the optional parameters
    # @option opts [String] :message_signature Used to ensure the request has not been tampered with during transmission. The Message-Signature is the Base64 encoded HMAC hash (SHA256  algorithm with the API Secret as the key.) For more information, refer to the supporting documentation on the Developer Portal.
    # @option opts [String] :region The region where client wants to process the transaction
    # @option opts [String] :store_id An optional outlet ID for clients that support multiple stores in the same developer app
    # @return [TransactionResponse]
    def order_return_transaction(content_type, client_request_id, api_key, timestamp, order_id, secondary_transaction, opts = {})
      data, _status_code, _headers = order_return_transaction_with_http_info(content_type, client_request_id, api_key, timestamp, order_id, secondary_transaction, opts)
      data
    end

    # Return/refund an order.
    # Use this for Returns of an existing order. Partial Returns are allowed.
    # @param content_type content type
    # @param client_request_id A client-generated ID for request tracking and signature creation, unique per request.  This is also used for idempotency control. We recommend 128-bit UUID format.
    # @param api_key 
    # @param timestamp Epoch timestamp in milliseconds in the request from a client system. Used for Message Signature generation and time limit (5 mins).
    # @param order_id Gateway order identifier as returned in the parameter orderId
    # @param secondary_transaction 
    # @param [Hash] opts the optional parameters
    # @option opts [String] :message_signature Used to ensure the request has not been tampered with during transmission. The Message-Signature is the Base64 encoded HMAC hash (SHA256  algorithm with the API Secret as the key.) For more information, refer to the supporting documentation on the Developer Portal.
    # @option opts [String] :region The region where client wants to process the transaction
    # @option opts [String] :store_id An optional outlet ID for clients that support multiple stores in the same developer app
    # @return [Array<(TransactionResponse, Fixnum, Hash)>] TransactionResponse data, response status code and response headers
    def order_return_transaction_with_http_info(content_type, client_request_id, api_key, timestamp, order_id, secondary_transaction, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug 'Calling API: OrderApi.order_return_transaction ...'
      end
      # verify the required parameter 'content_type' is set
      if @api_client.config.client_side_validation && content_type.nil?
        fail ArgumentError, "Missing the required parameter 'content_type' when calling OrderApi.order_return_transaction"
      end
      # verify enum value
      if @api_client.config.client_side_validation && !['application/json'].include?(content_type)
        fail ArgumentError, "invalid value for 'content_type', must be one of application/json"
      end
      # verify the required parameter 'client_request_id' is set
      if @api_client.config.client_side_validation && client_request_id.nil?
        fail ArgumentError, "Missing the required parameter 'client_request_id' when calling OrderApi.order_return_transaction"
      end
      # verify the required parameter 'api_key' is set
      if @api_client.config.client_side_validation && api_key.nil?
        fail ArgumentError, "Missing the required parameter 'api_key' when calling OrderApi.order_return_transaction"
      end
      # verify the required parameter 'timestamp' is set
      if @api_client.config.client_side_validation && timestamp.nil?
        fail ArgumentError, "Missing the required parameter 'timestamp' when calling OrderApi.order_return_transaction"
      end
      # verify the required parameter 'order_id' is set
      if @api_client.config.client_side_validation && order_id.nil?
        fail ArgumentError, "Missing the required parameter 'order_id' when calling OrderApi.order_return_transaction"
      end
      # verify the required parameter 'secondary_transaction' is set
      if @api_client.config.client_side_validation && secondary_transaction.nil?
        fail ArgumentError, "Missing the required parameter 'secondary_transaction' when calling OrderApi.order_return_transaction"
      end
      # resource path
      local_var_path = '/v1/orders/{order-id}/return'.sub('{' + 'order-id' + '}', order_id.to_s)

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

      # header parameters
      header_params = {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
      # HTTP header 'Content-Type'
      # header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
      # header_params[:'Content-Type'] = content_type
      header_params[:'Client-Request-Id'] = client_request_id
      header_params[:'Api-Key'] = api_key
      header_params[:'Timestamp'] = timestamp
      header_params[:'Message-Signature'] = opts[:'message_signature'] if !opts[:'message_signature'].nil?
      header_params[:'Region'] = opts[:'region'] if !opts[:'region'].nil?

      # form parameters
      form_params = {}

      # http body (model)
      post_body = @api_client.object_to_http_body(secondary_transaction)
      auth_names = []
      data, status_code, headers = @api_client.call_api(:POST, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'TransactionResponse',
        :default_error_type => 'ErrorResponse',
        :error_type => 'TransactionErrorResponse'
        )
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: OrderApi#order_return_transaction\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

  end
end