=begin
#Accounting Extension

#These APIs allow you to interact with HubSpot's Accounting Extension. It allows you to: * Specify the URLs that HubSpot will use when making webhook requests to your external accounting system. * Respond to webhook calls made to your external accounting system by HubSpot 

The version of the OpenAPI document: v3

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

=end

require 'cgi'

module Hubspot
  module Crm
    module Extensions
      module Accounting
        class SettingsApi
          attr_accessor :api_client

          def initialize(api_client = ApiClient.default)
            @api_client = api_client
          end
          # Get URL settings
          # Returns the URL settings for an accounting app with the specified ID.
          # @param app_id [Integer] The ID of the accounting app. This is the identifier of the application created in your HubSpot developer portal.
          # @param [Hash] opts the optional parameters
          # @return [AccountingAppSettings]
          def get_by_id(app_id, opts = {})
            data, _status_code, _headers = get_by_id_with_http_info(app_id, opts)
            data
          end

          # Get URL settings
          # Returns the URL settings for an accounting app with the specified ID.
          # @param app_id [Integer] The ID of the accounting app. This is the identifier of the application created in your HubSpot developer portal.
          # @param [Hash] opts the optional parameters
          # @return [Array<(AccountingAppSettings, Integer, Hash)>] AccountingAppSettings data, response status code and response headers
          def get_by_id_with_http_info(app_id, opts = {})
            if @api_client.config.debugging
              @api_client.config.logger.debug 'Calling API: SettingsApi.get_by_id ...'
            end
            # verify the required parameter 'app_id' is set
            if @api_client.config.client_side_validation && app_id.nil?
              fail ArgumentError, "Missing the required parameter 'app_id' when calling SettingsApi.get_by_id"
            end
            # resource path
            local_var_path = '/crm/v3/extensions/accounting/settings/{appId}'.sub('{' + 'appId' + '}', CGI.escape(app_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(['application/json', '*/*'])

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

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

            # return_type
            return_type = opts[:return_type] || 'AccountingAppSettings' 

            # auth_names
            auth_names = opts[:auth_names] || ['hapikey']

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

          # Add/Update URL Settings
          # Add/Update the URL settings for an accounting app with the specified ID.  All URLs must use the `https` protocol.
          # @param app_id [Integer] The ID of the accounting app. This is the identifier of the application created in your HubSpot developer portal.
          # @param accounting_app_settings [AccountingAppSettings] 
          # @param [Hash] opts the optional parameters
          # @return [nil]
          def replace(app_id, accounting_app_settings, opts = {})
            replace_with_http_info(app_id, accounting_app_settings, opts)
            nil
          end

          # Add/Update URL Settings
          # Add/Update the URL settings for an accounting app with the specified ID.  All URLs must use the &#x60;https&#x60; protocol.
          # @param app_id [Integer] The ID of the accounting app. This is the identifier of the application created in your HubSpot developer portal.
          # @param accounting_app_settings [AccountingAppSettings] 
          # @param [Hash] opts the optional parameters
          # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
          def replace_with_http_info(app_id, accounting_app_settings, opts = {})
            if @api_client.config.debugging
              @api_client.config.logger.debug 'Calling API: SettingsApi.replace ...'
            end
            # verify the required parameter 'app_id' is set
            if @api_client.config.client_side_validation && app_id.nil?
              fail ArgumentError, "Missing the required parameter 'app_id' when calling SettingsApi.replace"
            end
            # verify the required parameter 'accounting_app_settings' is set
            if @api_client.config.client_side_validation && accounting_app_settings.nil?
              fail ArgumentError, "Missing the required parameter 'accounting_app_settings' when calling SettingsApi.replace"
            end
            # resource path
            local_var_path = '/crm/v3/extensions/accounting/settings/{appId}'.sub('{' + 'appId' + '}', CGI.escape(app_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(['*/*'])
            # HTTP header 'Content-Type'
            header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])

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

            # http body (model)
            post_body = opts[:body] || @api_client.object_to_http_body(accounting_app_settings) 

            # return_type
            return_type = opts[:return_type] 

            # auth_names
            auth_names = opts[:auth_names] || ['hapikey']

            new_options = opts.merge(
              :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(:PUT, local_var_path, new_options)
            if @api_client.config.debugging
              @api_client.config.logger.debug "API called: SettingsApi#replace\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
            end
            return data, status_code, headers
          end
        end
      end
    end
  end
end
