=begin
#Docusign eSignature REST API

#The Docusign eSignature REST API provides you with a powerful, convenient, and simple Web services API for interacting with Docusign.

OpenAPI spec version: v2.1
Contact: devcenter@docusign.com
Generated by: https://github.com/swagger-api/swagger-codegen.git

=end

require "uri"

module DocuSign_eSign

  class ListRequestLogsOptions
    # 
    attr_accessor :encoding

    def self.default
      @@default ||= ListRequestLogsOptions.new
    end
  end


  class DiagnosticsApi
    attr_accessor :api_client

    def initialize(api_client = DiagnosticsApi.default)
      @api_client = api_client
    end

    # Deletes the request log files.
    # Deletes the request log files.
    # @return [nil]
    def delete_request_logs()
      delete_request_logs_with_http_info()
      return nil
    end

    # Deletes the request log files.
    # Deletes the request log files.
    # @return [Array<(nil, Fixnum, Hash)>] nil, response status code and response headers
    def delete_request_logs_with_http_info()
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: DiagnosticsApi.delete_request_logs ..."
      end
      # resource path
      local_var_path = "/v2.1/diagnostics/request_logs".sub('{format}','json')

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])

      # form parameters
      form_params = {}

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

    # Gets a request logging log file.
    # Retrieves information for a single log entry.  **Request** The `requestLogfId` property can be retrieved by getting the list of log entries. The Content-Transfer-Encoding header can be set to base64 to retrieve the API request/response as base 64 string. Otherwise the bytes of the request/response are returned.  **Response** If the Content-Transfer-Encoding header was set to base64, the log is returned as a base64 string.
    # @param request_log_id 
    # @return [File]
    def get_request_log(request_log_id)
      data, _status_code, _headers = get_request_log_with_http_info(request_log_id)
      return data
    end

    # Gets a request logging log file.
    # Retrieves information for a single log entry.  **Request** The &#x60;requestLogfId&#x60; property can be retrieved by getting the list of log entries. The Content-Transfer-Encoding header can be set to base64 to retrieve the API request/response as base 64 string. Otherwise the bytes of the request/response are returned.  **Response** If the Content-Transfer-Encoding header was set to base64, the log is returned as a base64 string.
    # @param request_log_id 
    # @return [Array<(File, Fixnum, Hash)>] File data, response status code and response headers
    def get_request_log_with_http_info(request_log_id)
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: DiagnosticsApi.get_request_log ..."
      end
      # verify the required parameter 'request_log_id' is set
      fail ArgumentError, "Missing the required parameter 'request_log_id' when calling DiagnosticsApi.get_request_log" if request_log_id.nil?
      # resource path
      local_var_path = "/v2.1/diagnostics/request_logs/{requestLogId}".sub('{format}','json').sub('{' + 'requestLogId' + '}', request_log_id.to_s)

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['text/plain'])

      # 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 => 'File')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: DiagnosticsApi#get_request_log\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Gets the API request logging settings.
    # Retrieves the current API request logging setting for the user and remaining log entries.  **Response** The response includes the current API request logging setting for the user, along with the maximum log entries and remaining log entries.
    # @return [DiagnosticsSettingsInformation]
    def get_request_log_settings()
      data, _status_code, _headers = get_request_log_settings_with_http_info()
      return data
    end

    # Gets the API request logging settings.
    # Retrieves the current API request logging setting for the user and remaining log entries.  **Response** The response includes the current API request logging setting for the user, along with the maximum log entries and remaining log entries.
    # @return [Array<(DiagnosticsSettingsInformation, Fixnum, Hash)>] DiagnosticsSettingsInformation data, response status code and response headers
    def get_request_log_settings_with_http_info()
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: DiagnosticsApi.get_request_log_settings ..."
      end
      # resource path
      local_var_path = "/v2.1/diagnostics/settings".sub('{format}','json')

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])

      # 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 => 'DiagnosticsSettingsInformation')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: DiagnosticsApi#get_request_log_settings\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Lists resources for REST version specified
    # Retrieves the base resources available for the DocuSign REST APIs.  You do not need an integrator key to view the REST API versions and resources.  Example: https://demo.docusign.net/restapi/v2 lists all of the base resources available in version 2 of the REST API on the DocuSign Demo system.  To view descriptions and samples of the service operations for all versions, remove the version number and add /help to the URL.  Example: https://demo.docusign.net/restapi/help lists the REST API operations on the DocuSign Demo system with XML and JSON request and response samples.
    # @return [ResourceInformation]
    def get_resources()
      data, _status_code, _headers = get_resources_with_http_info()
      return data
    end

    # Lists resources for REST version specified
    # Retrieves the base resources available for the DocuSign REST APIs.  You do not need an integrator key to view the REST API versions and resources.  Example: https://demo.docusign.net/restapi/v2 lists all of the base resources available in version 2 of the REST API on the DocuSign Demo system.  To view descriptions and samples of the service operations for all versions, remove the version number and add /help to the URL.  Example: https://demo.docusign.net/restapi/help lists the REST API operations on the DocuSign Demo system with XML and JSON request and response samples.
    # @return [Array<(ResourceInformation, Fixnum, Hash)>] ResourceInformation data, response status code and response headers
    def get_resources_with_http_info()
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: DiagnosticsApi.get_resources ..."
      end
      # resource path
      local_var_path = "/v2.1".sub('{format}','json')

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])

      # 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 => 'ResourceInformation')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: DiagnosticsApi#get_resources\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Retrieves the available REST API versions.
    # Retrieves the available REST API versions.  DocuSign Production system: https://www.docusign.net/restapi/service_information DocuSign Demo system: https://demo.docusign.net/restapi/service_information  You do not need an integrator key to view the REST API versions and resources.
    # @return [ServiceInformation]
    def get_service()
      data, _status_code, _headers = get_service_with_http_info()
      return data
    end

    # Retrieves the available REST API versions.
    # Retrieves the available REST API versions.  DocuSign Production system: https://www.docusign.net/restapi/service_information DocuSign Demo system: https://demo.docusign.net/restapi/service_information  You do not need an integrator key to view the REST API versions and resources.
    # @return [Array<(ServiceInformation, Fixnum, Hash)>] ServiceInformation data, response status code and response headers
    def get_service_with_http_info()
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: DiagnosticsApi.get_service ..."
      end
      # resource path
      local_var_path = "/service_information".sub('{format}','json')

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])

      # 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 => 'ServiceInformation')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: DiagnosticsApi#get_service\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Gets the API request logging log files.
    # Retrieves a list of log entries as a JSON or xml object or as a zip file containing the entries.  If the Accept header is set to application/zip, the response is a zip file containing individual text files, each representing an API request.  If the Accept header is set to `application/json` or `application/xml`, the response returns list of log entries in either JSON or XML. An example JSON response body is shown below. 
    # @param DocuSign_eSign::ListRequestLogsOptions Options for modifying the behavior of the function.
    # @return [ApiRequestLogsResult]
    def list_request_logs(options = DocuSign_eSign::ListRequestLogsOptions.default)
      data, _status_code, _headers = list_request_logs_with_http_info(options)
      return data
    end

    # Gets the API request logging log files.
    # Retrieves a list of log entries as a JSON or xml object or as a zip file containing the entries.  If the Accept header is set to application/zip, the response is a zip file containing individual text files, each representing an API request.  If the Accept header is set to &#x60;application/json&#x60; or &#x60;application/xml&#x60;, the response returns list of log entries in either JSON or XML. An example JSON response body is shown below. 
    # @param DocuSign_eSign::ListRequestLogsOptions Options for modifying the behavior of the function.
    # @return [Array<(ApiRequestLogsResult, Fixnum, Hash)>] ApiRequestLogsResult data, response status code and response headers
    def list_request_logs_with_http_info(options = DocuSign_eSign::ListRequestLogsOptions.default)
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: DiagnosticsApi.list_request_logs ..."
      end
      # resource path
      local_var_path = "/v2.1/diagnostics/request_logs".sub('{format}','json')

      # query parameters
      query_params = {}
      query_params[:'encoding'] = options.encoding if !options.encoding.nil?

      # header parameters
      header_params = {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])

      # 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 => 'ApiRequestLogsResult')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: DiagnosticsApi#list_request_logs\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Enables or disables API request logging for troubleshooting.
    # Enables or disables API request logging for troubleshooting.  When enabled (`apiRequestLogging` is set to true), REST API requests and responses for the user are added to a log. A log can have up to 50 requests/responses and the current number of log entries can be determined by getting the settings. Logging is automatically disabled when the log limit of 50 is reached.  You can call [ML:GetRequestLog] or [ML:GetRequestLogs] to download the log files (individually or as a zip file). Call [ML:DeleteRequestLogs] to clear the log by deleting current entries.  Private information, such as passwords and integrator key information, which is normally located in the call header is omitted from the request/response log.  ###### Note: API request logging only captures requests from the authenticated user. Any call that does not authenticate the user and resolve a userId isn't logged. Meaning that login_information, NewAccounts, or other distributor-credential calls are not logged. 
    # @param diagnostics_settings_information  (optional parameter)
    # @return [DiagnosticsSettingsInformation]
    def update_request_log_settings(diagnostics_settings_information)
      data, _status_code, _headers = update_request_log_settings_with_http_info( diagnostics_settings_information)
      return data
    end

    # Enables or disables API request logging for troubleshooting.
    # Enables or disables API request logging for troubleshooting.  When enabled (&#x60;apiRequestLogging&#x60; is set to true), REST API requests and responses for the user are added to a log. A log can have up to 50 requests/responses and the current number of log entries can be determined by getting the settings. Logging is automatically disabled when the log limit of 50 is reached.  You can call [ML:GetRequestLog] or [ML:GetRequestLogs] to download the log files (individually or as a zip file). Call [ML:DeleteRequestLogs] to clear the log by deleting current entries.  Private information, such as passwords and integrator key information, which is normally located in the call header is omitted from the request/response log.  ###### Note: API request logging only captures requests from the authenticated user. Any call that does not authenticate the user and resolve a userId isn&#39;t logged. Meaning that login_information, NewAccounts, or other distributor-credential calls are not logged. 
    # @param diagnostics_settings_information  (optional parameter)
    # @return [Array<(DiagnosticsSettingsInformation, Fixnum, Hash)>] DiagnosticsSettingsInformation data, response status code and response headers
    def update_request_log_settings_with_http_info(diagnostics_settings_information)
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: DiagnosticsApi.update_request_log_settings ..."
      end
      # resource path
      local_var_path = "/v2.1/diagnostics/settings".sub('{format}','json')

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])

      # form parameters
      form_params = {}

      # http body (model)
      post_body = @api_client.object_to_http_body(diagnostics_settings_information)
      auth_names = []
      data, status_code, headers = @api_client.call_api(:PUT, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'DiagnosticsSettingsInformation')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: DiagnosticsApi#update_request_log_settings\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end
  end
end