=begin
#BillForward REST API

#No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)

OpenAPI spec version: 1.0.0

Generated by: https://github.com/swagger-api/swagger-codegen.git

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

=end

require "uri"

module BillForward
  class SynchAppConfigsApi
    attr_accessor :api_client

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

    # Create a synch app configuration.
    # {\"nickname\":\"Create a new synch app configuration\",\"request\":\"createSynchAppConfigurationRequest.html\",\"response\":\"createSynchAppConfigurationResponse.html\"}
    # @param synch_app_config The data synch app config object to be created.
    # @param [Hash] opts the optional parameters
    # @return [DataSynchronisationAppConfigurationPagedMetadata]
    def create_sync_app_config(synch_app_config, opts = {})
      data, _status_code, _headers = create_sync_app_config_with_http_info(synch_app_config, opts)
      return data
    end

    # Create a synch app configuration.
    # {\&quot;nickname\&quot;:\&quot;Create a new synch app configuration\&quot;,\&quot;request\&quot;:\&quot;createSynchAppConfigurationRequest.html\&quot;,\&quot;response\&quot;:\&quot;createSynchAppConfigurationResponse.html\&quot;}
    # @param synch_app_config The data synch app config object to be created.
    # @param [Hash] opts the optional parameters
    # @return [Array<(DataSynchronisationAppConfigurationPagedMetadata, Fixnum, Hash)>] DataSynchronisationAppConfigurationPagedMetadata data, response status code and response headers
    def create_sync_app_config_with_http_info(synch_app_config, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: SynchAppConfigsApi.create_sync_app_config ..."
      end
      # verify the required parameter 'synch_app_config' is set
      fail ArgumentError, "Missing the required parameter 'synch_app_config' when calling SynchAppConfigsApi.create_sync_app_config" if synch_app_config.nil?
      # resource path
      local_var_path = "/synchAppConfigs".sub('{format}','json')

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['text/xml', 'application/xml', 'application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

      # http body (model)
      post_body = @api_client.object_to_http_body(synch_app_config)
      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 => 'DataSynchronisationAppConfigurationPagedMetadata')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: SynchAppConfigsApi#create_sync_app_config\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Returns a single config, specified by the ID parameter.
    # { \"nickname\" : \"Retrieve an existing synch config\",\"response\" : \"getSynchAppConfigByID.html\"}
    # @param synch_app_configs_id ID of the Synch App Configuration.
    # @param [Hash] opts the optional parameters
    # @option opts [Array<String>] :organizations A list of organization -IDs used to restrict the scope of API calls.
    # @return [DataSynchronisationAppConfigurationPagedMetadata]
    def get_sync_app_config(synch_app_configs_id, opts = {})
      data, _status_code, _headers = get_sync_app_config_with_http_info(synch_app_configs_id, opts)
      return data
    end

    # Returns a single config, specified by the ID parameter.
    # { \&quot;nickname\&quot; : \&quot;Retrieve an existing synch config\&quot;,\&quot;response\&quot; : \&quot;getSynchAppConfigByID.html\&quot;}
    # @param synch_app_configs_id ID of the Synch App Configuration.
    # @param [Hash] opts the optional parameters
    # @option opts [Array<String>] :organizations A list of organization -IDs used to restrict the scope of API calls.
    # @return [Array<(DataSynchronisationAppConfigurationPagedMetadata, Fixnum, Hash)>] DataSynchronisationAppConfigurationPagedMetadata data, response status code and response headers
    def get_sync_app_config_with_http_info(synch_app_configs_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: SynchAppConfigsApi.get_sync_app_config ..."
      end
      # verify the required parameter 'synch_app_configs_id' is set
      fail ArgumentError, "Missing the required parameter 'synch_app_configs_id' when calling SynchAppConfigsApi.get_sync_app_config" if synch_app_configs_id.nil?
      # resource path
      local_var_path = "/synchAppConfigs/{synchAppConfigs-ID}".sub('{format}','json').sub('{' + 'synchAppConfigs-ID' + '}', synch_app_configs_id.to_s)

      # query parameters
      query_params = {}
      query_params[:'organizations'] = @api_client.build_collection_param(opts[:'organizations'], :multi) if !opts[:'organizations'].nil?

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['text/plain']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

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

    # Returns a collection configurations, specified by the platform parameter.
    # { \"nickname\" : \"Retrieve by platform\",\"response\" : \"getSynchAppConfigsByPlatform.html\"}
    # @param platform The type of the synch app configuration.
    # @param [Hash] opts the optional parameters
    # @option opts [Array<String>] :organizations A list of organization-IDs used to restrict the scope of API calls.
    # @return [DataSynchronisationAppConfigurationPagedMetadata]
    def get_sync_app_config_by_platform(platform, opts = {})
      data, _status_code, _headers = get_sync_app_config_by_platform_with_http_info(platform, opts)
      return data
    end

    # Returns a collection configurations, specified by the platform parameter.
    # { \&quot;nickname\&quot; : \&quot;Retrieve by platform\&quot;,\&quot;response\&quot; : \&quot;getSynchAppConfigsByPlatform.html\&quot;}
    # @param platform The type of the synch app configuration.
    # @param [Hash] opts the optional parameters
    # @option opts [Array<String>] :organizations A list of organization-IDs used to restrict the scope of API calls.
    # @return [Array<(DataSynchronisationAppConfigurationPagedMetadata, Fixnum, Hash)>] DataSynchronisationAppConfigurationPagedMetadata data, response status code and response headers
    def get_sync_app_config_by_platform_with_http_info(platform, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: SynchAppConfigsApi.get_sync_app_config_by_platform ..."
      end
      # verify the required parameter 'platform' is set
      fail ArgumentError, "Missing the required parameter 'platform' when calling SynchAppConfigsApi.get_sync_app_config_by_platform" if platform.nil?
      # verify enum value
      unless ['Salesforce'].include?(platform)
        fail ArgumentError, "invalid value for 'platform', must be one of Salesforce"
      end
      # resource path
      local_var_path = "/synchAppConfigs/platform/{platform}".sub('{format}','json').sub('{' + 'platform' + '}', platform.to_s)

      # query parameters
      query_params = {}
      query_params[:'organizations'] = @api_client.build_collection_param(opts[:'organizations'], :multi) if !opts[:'organizations'].nil?

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['text/plain']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

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

    # Update a synch app configuration.
    # { \"nickname\" : \"Update a sync app configuration\", \"request\" : \"updateSyncAppConfigRequest.html\" ,\"response\" : \"updateSyncAppConfigResponse.html\" }
    # @param synch_app_config The synch app configuration object to be updated.
    # @param [Hash] opts the optional parameters
    # @return [DataSynchronisationAppConfigurationPagedMetadata]
    def update_sync_app_config(synch_app_config, opts = {})
      data, _status_code, _headers = update_sync_app_config_with_http_info(synch_app_config, opts)
      return data
    end

    # Update a synch app configuration.
    # { \&quot;nickname\&quot; : \&quot;Update a sync app configuration\&quot;, \&quot;request\&quot; : \&quot;updateSyncAppConfigRequest.html\&quot; ,\&quot;response\&quot; : \&quot;updateSyncAppConfigResponse.html\&quot; }
    # @param synch_app_config The synch app configuration object to be updated.
    # @param [Hash] opts the optional parameters
    # @return [Array<(DataSynchronisationAppConfigurationPagedMetadata, Fixnum, Hash)>] DataSynchronisationAppConfigurationPagedMetadata data, response status code and response headers
    def update_sync_app_config_with_http_info(synch_app_config, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: SynchAppConfigsApi.update_sync_app_config ..."
      end
      # verify the required parameter 'synch_app_config' is set
      fail ArgumentError, "Missing the required parameter 'synch_app_config' when calling SynchAppConfigsApi.update_sync_app_config" if synch_app_config.nil?
      # resource path
      local_var_path = "/synchAppConfigs".sub('{format}','json')

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

      # HTTP header 'Accept' (if needed)
      local_header_accept = ['text/xml', 'application/xml', 'application/json']
      local_header_accept_result = @api_client.select_header_accept(local_header_accept) and header_params['Accept'] = local_header_accept_result

      # HTTP header 'Content-Type'
      local_header_content_type = ['application/json']
      header_params['Content-Type'] = @api_client.select_header_content_type(local_header_content_type)

      # form parameters
      form_params = {}

      # http body (model)
      post_body = @api_client.object_to_http_body(synch_app_config)
      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 => 'DataSynchronisationAppConfigurationPagedMetadata')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: SynchAppConfigsApi#update_sync_app_config\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end
  end
end
