=begin
#Marketing Transactional Single Send

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

The version of the OpenAPI document: v3

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

=end

require 'cgi'

module Hubspot
  module Marketing
    module Transactional
      class PublicSMTPTokensApi
        attr_accessor :api_client

        def initialize(api_client = ApiClient.default)
          @api_client = api_client
        end
        # Delete a single token by ID.
        # Delete a single token by ID.
        # @param token_id [String] Identifier generated when a token is created.
        # @param [Hash] opts the optional parameters
        # @return [nil]
        def archive_token(token_id, opts = {})
          archive_token_with_http_info(token_id, opts)
          nil
        end

        # Delete a single token by ID.
        # Delete a single token by ID.
        # @param token_id [String] Identifier generated when a token is created.
        # @param [Hash] opts the optional parameters
        # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
        def archive_token_with_http_info(token_id, opts = {})
          if @api_client.config.debugging
            @api_client.config.logger.debug 'Calling API: PublicSMTPTokensApi.archive_token ...'
          end
          # verify the required parameter 'token_id' is set
          if @api_client.config.client_side_validation && token_id.nil?
            fail ArgumentError, "Missing the required parameter 'token_id' when calling PublicSMTPTokensApi.archive_token"
          end
          # resource path
          local_var_path = '/marketing/v3/transactional/smtp-tokens/{tokenId}'.sub('{' + 'tokenId' + '}', CGI.escape(token_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(['*/*'])

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

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

          # return_type
          return_type = opts[:debug_return_type]

          # auth_names
          auth_names = opts[:debug_auth_names] || ['oauth2']

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

        # Create a SMTP API token.
        # Create a SMTP API token.
        # @param smtp_api_token_request_egg [SmtpApiTokenRequestEgg] A request object that includes the campaign name tied to the token and whether contacts should be created for email recipients.
        # @param [Hash] opts the optional parameters
        # @return [SmtpApiTokenView]
        def create_token(smtp_api_token_request_egg, opts = {})
          data, _status_code, _headers = create_token_with_http_info(smtp_api_token_request_egg, opts)
          data
        end

        # Create a SMTP API token.
        # Create a SMTP API token.
        # @param smtp_api_token_request_egg [SmtpApiTokenRequestEgg] A request object that includes the campaign name tied to the token and whether contacts should be created for email recipients.
        # @param [Hash] opts the optional parameters
        # @return [Array<(SmtpApiTokenView, Integer, Hash)>] SmtpApiTokenView data, response status code and response headers
        def create_token_with_http_info(smtp_api_token_request_egg, opts = {})
          if @api_client.config.debugging
            @api_client.config.logger.debug 'Calling API: PublicSMTPTokensApi.create_token ...'
          end
          # verify the required parameter 'smtp_api_token_request_egg' is set
          if @api_client.config.client_side_validation && smtp_api_token_request_egg.nil?
            fail ArgumentError, "Missing the required parameter 'smtp_api_token_request_egg' when calling PublicSMTPTokensApi.create_token"
          end
          # resource path
          local_var_path = '/marketing/v3/transactional/smtp-tokens'

          # 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', '*/*'])
          # HTTP header 'Content-Type'
          content_type = @api_client.select_header_content_type(['application/json'])
          if !content_type.nil?
              header_params['Content-Type'] = content_type
          end

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

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

          # return_type
          return_type = opts[:debug_return_type] || 'SmtpApiTokenView'

          # auth_names
          auth_names = opts[:debug_auth_names] || ['oauth2']

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

        # Query a single token by ID.
        # Query a single token by ID.
        # @param token_id [String] Identifier generated when a token is created.
        # @param [Hash] opts the optional parameters
        # @return [SmtpApiTokenView]
        def get_token_by_id(token_id, opts = {})
          data, _status_code, _headers = get_token_by_id_with_http_info(token_id, opts)
          data
        end

        # Query a single token by ID.
        # Query a single token by ID.
        # @param token_id [String] Identifier generated when a token is created.
        # @param [Hash] opts the optional parameters
        # @return [Array<(SmtpApiTokenView, Integer, Hash)>] SmtpApiTokenView data, response status code and response headers
        def get_token_by_id_with_http_info(token_id, opts = {})
          if @api_client.config.debugging
            @api_client.config.logger.debug 'Calling API: PublicSMTPTokensApi.get_token_by_id ...'
          end
          # verify the required parameter 'token_id' is set
          if @api_client.config.client_side_validation && token_id.nil?
            fail ArgumentError, "Missing the required parameter 'token_id' when calling PublicSMTPTokensApi.get_token_by_id"
          end
          # resource path
          local_var_path = '/marketing/v3/transactional/smtp-tokens/{tokenId}'.sub('{' + 'tokenId' + '}', CGI.escape(token_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[:debug_body]

          # return_type
          return_type = opts[:debug_return_type] || 'SmtpApiTokenView'

          # auth_names
          auth_names = opts[:debug_auth_names] || ['oauth2']

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

        # Query SMTP API tokens by campaign name or an emailCampaignId.
        # Query multiple SMTP API tokens by campaign name or a single token by emailCampaignId.
        # @param [Hash] opts the optional parameters
        # @option opts [String] :campaign_name A name for the campaign tied to the SMTP API token.
        # @option opts [String] :email_campaign_id Identifier assigned to the campaign provided during the token creation.
        # @option opts [String] :after Starting point to get the next set of results.
        # @option opts [Integer] :limit Maximum number of tokens to return.
        # @return [CollectionResponseSmtpApiTokenViewForwardPaging]
        def get_tokens_page(opts = {})
          data, _status_code, _headers = get_tokens_page_with_http_info(opts)
          data
        end

        # Query SMTP API tokens by campaign name or an emailCampaignId.
        # Query multiple SMTP API tokens by campaign name or a single token by emailCampaignId.
        # @param [Hash] opts the optional parameters
        # @option opts [String] :campaign_name A name for the campaign tied to the SMTP API token.
        # @option opts [String] :email_campaign_id Identifier assigned to the campaign provided during the token creation.
        # @option opts [String] :after Starting point to get the next set of results.
        # @option opts [Integer] :limit Maximum number of tokens to return.
        # @return [Array<(CollectionResponseSmtpApiTokenViewForwardPaging, Integer, Hash)>] CollectionResponseSmtpApiTokenViewForwardPaging data, response status code and response headers
        def get_tokens_page_with_http_info(opts = {})
          if @api_client.config.debugging
            @api_client.config.logger.debug 'Calling API: PublicSMTPTokensApi.get_tokens_page ...'
          end
          # resource path
          local_var_path = '/marketing/v3/transactional/smtp-tokens'

          # query parameters
          query_params = opts[:query_params] || {}
          query_params[:'campaignName'] = opts[:'campaign_name'] if !opts[:'campaign_name'].nil?
          query_params[:'emailCampaignId'] = opts[:'email_campaign_id'] if !opts[:'email_campaign_id'].nil?
          query_params[:'after'] = opts[:'after'] if !opts[:'after'].nil?
          query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?

          # 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[:debug_body]

          # return_type
          return_type = opts[:debug_return_type] || 'CollectionResponseSmtpApiTokenViewForwardPaging'

          # auth_names
          auth_names = opts[:debug_auth_names] || ['oauth2']

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

        # Reset the password of an existing token.
        # Allows the creation of a replacement password for a given token. Once the password is successfully reset, the old password for the token will be invalid.
        # @param token_id [String] Identifier generated when a token is created.
        # @param [Hash] opts the optional parameters
        # @return [SmtpApiTokenView]
        def reset_password(token_id, opts = {})
          data, _status_code, _headers = reset_password_with_http_info(token_id, opts)
          data
        end

        # Reset the password of an existing token.
        # Allows the creation of a replacement password for a given token. Once the password is successfully reset, the old password for the token will be invalid.
        # @param token_id [String] Identifier generated when a token is created.
        # @param [Hash] opts the optional parameters
        # @return [Array<(SmtpApiTokenView, Integer, Hash)>] SmtpApiTokenView data, response status code and response headers
        def reset_password_with_http_info(token_id, opts = {})
          if @api_client.config.debugging
            @api_client.config.logger.debug 'Calling API: PublicSMTPTokensApi.reset_password ...'
          end
          # verify the required parameter 'token_id' is set
          if @api_client.config.client_side_validation && token_id.nil?
            fail ArgumentError, "Missing the required parameter 'token_id' when calling PublicSMTPTokensApi.reset_password"
          end
          # resource path
          local_var_path = '/marketing/v3/transactional/smtp-tokens/{tokenId}/password-reset'.sub('{' + 'tokenId' + '}', CGI.escape(token_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[:debug_body]

          # return_type
          return_type = opts[:debug_return_type] || 'SmtpApiTokenView'

          # auth_names
          auth_names = opts[:debug_auth_names] || ['oauth2']

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