# #Eligibility
#
# Reference for developers
#
# OpenAPI spec version: v3
#
# Generated by: https://github.com/swagger-api/swagger-codegen.git
# Swagger Codegen version: 2.4.17
#

require 'addressable/uri'

module ChangeHealthcare
  module Eligibility
    module SwaggerClient
      class Configuration
        # Defines url scheme
        attr_accessor :scheme

        # Defines url host
        attr_accessor :host

        # Defines url base path
        attr_accessor :base_path

        # Defines API keys used with API Key authentications.
        #
        # @return [Hash] key: parameter name, value: parameter value (API key)
        #
        # @example parameter name is "api_key", API key is "xxx" (e.g. "api_key=xxx" in query string)
        #   config.api_key['api_key'] = 'xxx'
        attr_accessor :api_key

        # Defines API key prefixes used with API Key authentications.
        #
        # @return [Hash] key: parameter name, value: API key prefix
        #
        # @example parameter name is "Authorization", API key prefix is "Token" (e.g. "Authorization: Token xxx" in headers)
        #   config.api_key_prefix['api_key'] = 'Token'
        attr_accessor :api_key_prefix

        # Defines the username used with HTTP basic authentication.
        #
        # @return [String]
        attr_accessor :username

        # Defines the password used with HTTP basic authentication.
        #
        # @return [String]
        attr_accessor :password

        # Defines the access token (Bearer) used with OAuth2.
        attr_accessor :access_token

        # Set this to enable/disable debugging. When enabled (set to true), HTTP request/response
        # details will be logged with `logger.debug` (see the `logger` attribute).
        # Default to false.
        #
        # @return [true, false]
        attr_accessor :debugging

        # Defines the logger used for debugging.
        # Default to `Rails.logger` (when in Rails) or logging to STDOUT.
        #
        # @return [#debug]
        attr_accessor :logger

        # Defines the temporary folder to store downloaded files
        # (for API endpoints that have file response).
        # Default to use `Tempfile`.
        #
        # @return [String]
        attr_accessor :temp_folder_path

        # The time limit for HTTP request in seconds.
        # Default to 0 (never times out).
        attr_accessor :timeout

        # Set this to false to skip client side validation in the operation.
        # Default to true.
        # @return [true, false]
        attr_accessor :client_side_validation

        ### TLS/SSL setting
        # Set this to false to skip verifying SSL certificate when calling API from https server.
        # Default to true.
        #
        # @note Do NOT set it to false in production code, otherwise you would face multiple types of cryptographic attacks.
        #
        # @return [true, false]
        attr_accessor :verify_ssl

        ### TLS/SSL setting
        # Set this to false to skip verifying SSL host name
        # Default to true.
        #
        # @note Do NOT set it to false in production code, otherwise you would face multiple types of cryptographic attacks.
        #
        # @return [true, false]
        attr_accessor :verify_ssl_host

        ### TLS/SSL setting
        # Set this to customize the certificate file to verify the peer.
        #
        # @return [String] the path to the certificate file
        #
        # @see The `cainfo` option of Typhoeus, `--cert` option of libcurl. Related source code:
        # https://github.com/typhoeus/typhoeus/blob/master/lib/typhoeus/easy_factory.rb#L145
        attr_accessor :ssl_ca_cert

        ### TLS/SSL setting
        # Client certificate file (for client certificate)
        attr_accessor :cert_file

        ### TLS/SSL setting
        # Client private key file (for client certificate)
        attr_accessor :key_file

        # Set this to customize parameters encoding of array parameter with multi collectionFormat.
        # Default to nil.
        #
        # @see The params_encoding option of Ethon. Related source code:
        # https://github.com/typhoeus/ethon/blob/master/lib/ethon/easy/queryable.rb#L96
        attr_accessor :params_encoding

        attr_accessor :inject_format, :force_ending_format

        def initialize
          @scheme = 'https'
          @host = 'sandbox.apis.changehealthcare.com'
          @base_path = '/medicalnetwork/eligibility/v3'
          @api_key = {}
          @api_key_prefix = {}
          @timeout = 0
          @client_side_validation = true
          @verify_ssl = true
          @verify_ssl_host = true
          @params_encoding = nil
          @cert_file = nil
          @key_file = nil
          @debugging = false
          @inject_format = false
          @force_ending_format = false
          @logger = defined?(Rails) ? Rails.logger : Logger.new(STDOUT)

          yield(self) if block_given?
        end

        # The default Configuration object.
        def self.default
          @@default ||= Configuration.new
        end

        def configure
          yield(self) if block_given?
        end

        def scheme=(scheme)
          # remove :// from scheme
          @scheme = scheme.sub(%r{://}, '')
        end

        def host=(host)
          # remove http(s):// and anything after a slash
          @host = host.sub(%r{https?://}, '').split('/').first
        end

        def base_path=(base_path)
          # Add leading and trailing slashes to base_path
          @base_path = "/#{base_path}".gsub(%r{/+}, '/')
          @base_path = '' if @base_path == '/'
        end

        def base_url
          url = "#{scheme}://#{[host, base_path].join('/').gsub(%r{/+}, '/')}".sub(%r{/+\z}, '')
          Addressable::URI.encode(url)
        end

        # Gets API key (with prefix if set).
        # @param [String] param_name the parameter name of API key auth
        def api_key_with_prefix(param_name)
          if @api_key_prefix[param_name]
            "#{@api_key_prefix[param_name]} #{@api_key[param_name]}"
          else
            @api_key[param_name]
          end
        end

        # Gets Basic Auth token string
        def basic_auth_token
          'Basic ' + ["#{username}:#{password}"].pack('m').delete("\r\n")
        end

        # Returns Auth Settings hash for api client.
        def auth_settings
          {
          }
        end
      end
    end
  end
end