=begin
PureCloud Platform API

With the PureCloud Platform API, you can control all aspects of your PureCloud environment. With the APIs you can access the system configuration, manage conversations and more.

OpenAPI spec version: v2
Contact: DeveloperEvangelists@genesys.com
Generated by: https://github.com/swagger-api/swagger-codegen.git

License: UNLICENSED
https://help.mypurecloud.com/articles/terms-and-conditions/

Terms of Service: https://help.mypurecloud.com/articles/terms-and-conditions/

=end

require "uri"

module PureCloud
  class ObjectsApi
    attr_accessor :api_client

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

    # Delete a division.
    # 
    # @param division_id Division ID
    # @param [Hash] opts the optional parameters
    # @option opts [BOOLEAN] :force Force delete this division as well as the grants and objects associated with it (default to false)
    # @return [nil]
    def delete_authorization_division(division_id, opts = {})
      delete_authorization_division_with_http_info(division_id, opts)
      return nil
    end

    # Delete a division.
    # 
    # @param division_id Division ID
    # @param [Hash] opts the optional parameters
    # @option opts [BOOLEAN] :force Force delete this division as well as the grants and objects associated with it
    # @return [Array<(nil, Fixnum, Hash)>] nil, response status code and response headers
    def delete_authorization_division_with_http_info(division_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: ObjectsApi.delete_authorization_division ..."
      end
      
      
      # verify the required parameter 'division_id' is set
      fail ArgumentError, "Missing the required parameter 'division_id' when calling ObjectsApi.delete_authorization_division" if division_id.nil?
      
      
      
      
      
      
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/authorization/divisions/{divisionId}".sub('{format}','json').sub('{' + 'divisionId' + '}', division_id.to_s)

      # query parameters
      query_params = {}
      query_params[:'force'] = opts[:'force'] if opts[:'force']

      # 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 = ['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 = nil
      
      auth_names = ['PureCloud OAuth']
      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: ObjectsApi#delete_authorization_division\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Returns an authorization division.
    # 
    # @param division_id Division ID
    # @param [Hash] opts the optional parameters
    # @option opts [BOOLEAN] :object_count Get count of objects in this division, grouped by type (default to false)
    # @return [AuthzDivision]
    def get_authorization_division(division_id, opts = {})
      data, _status_code, _headers = get_authorization_division_with_http_info(division_id, opts)
      return data
    end

    # Returns an authorization division.
    # 
    # @param division_id Division ID
    # @param [Hash] opts the optional parameters
    # @option opts [BOOLEAN] :object_count Get count of objects in this division, grouped by type
    # @return [Array<(AuthzDivision, Fixnum, Hash)>] AuthzDivision data, response status code and response headers
    def get_authorization_division_with_http_info(division_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: ObjectsApi.get_authorization_division ..."
      end
      
      
      # verify the required parameter 'division_id' is set
      fail ArgumentError, "Missing the required parameter 'division_id' when calling ObjectsApi.get_authorization_division" if division_id.nil?
      
      
      
      
      
      
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/authorization/divisions/{divisionId}".sub('{format}','json').sub('{' + 'divisionId' + '}', division_id.to_s)

      # query parameters
      query_params = {}
      query_params[:'objectCount'] = opts[:'object_count'] if opts[:'object_count']

      # 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 = ['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 = nil
      
      auth_names = ['PureCloud OAuth']
      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 => 'AuthzDivision')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: ObjectsApi#get_authorization_division\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Retrieve a list of all divisions defined for the organization
    # Request specific divisions by id using a query param \"id\", e.g.  ?id=5f777167-63be-4c24-ad41-374155d9e28b&id=72e9fb25-c484-488d-9312-7acba82435b3
    # @param [Hash] opts the optional parameters
    # @option opts [Integer] :page_size The total page size requested (default to 25)
    # @option opts [Integer] :page_number The page number requested (default to 1)
    # @option opts [String] :sort_by variable name requested to sort by
    # @option opts [Array<String>] :expand variable name requested by expand list
    # @option opts [String] :next_page next page token
    # @option opts [String] :previous_page Previous page token
    # @option opts [BOOLEAN] :object_count Include the count of objects contained in the division (default to false)
    # @option opts [Array<String>] :id Optionally request specific divisions by their IDs
    # @option opts [String] :name Search term to filter by division name
    # @return [AuthzDivisionEntityListing]
    def get_authorization_divisions(opts = {})
      data, _status_code, _headers = get_authorization_divisions_with_http_info(opts)
      return data
    end

    # Retrieve a list of all divisions defined for the organization
    # Request specific divisions by id using a query param \&quot;id\&quot;, e.g.  ?id=5f777167-63be-4c24-ad41-374155d9e28b&amp;id=72e9fb25-c484-488d-9312-7acba82435b3
    # @param [Hash] opts the optional parameters
    # @option opts [Integer] :page_size The total page size requested
    # @option opts [Integer] :page_number The page number requested
    # @option opts [String] :sort_by variable name requested to sort by
    # @option opts [Array<String>] :expand variable name requested by expand list
    # @option opts [String] :next_page next page token
    # @option opts [String] :previous_page Previous page token
    # @option opts [BOOLEAN] :object_count Include the count of objects contained in the division
    # @option opts [Array<String>] :id Optionally request specific divisions by their IDs
    # @option opts [String] :name Search term to filter by division name
    # @return [Array<(AuthzDivisionEntityListing, Fixnum, Hash)>] AuthzDivisionEntityListing data, response status code and response headers
    def get_authorization_divisions_with_http_info(opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: ObjectsApi.get_authorization_divisions ..."
      end
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/authorization/divisions".sub('{format}','json')

      # query parameters
      query_params = {}
      query_params[:'pageSize'] = opts[:'page_size'] if opts[:'page_size']
      query_params[:'pageNumber'] = opts[:'page_number'] if opts[:'page_number']
      query_params[:'sortBy'] = opts[:'sort_by'] if opts[:'sort_by']
      query_params[:'expand'] = @api_client.build_collection_param(opts[:'expand'], :multi) if opts[:'expand']
      query_params[:'nextPage'] = opts[:'next_page'] if opts[:'next_page']
      query_params[:'previousPage'] = opts[:'previous_page'] if opts[:'previous_page']
      query_params[:'objectCount'] = opts[:'object_count'] if opts[:'object_count']
      query_params[:'id'] = @api_client.build_collection_param(opts[:'id'], :multi) if opts[:'id']
      query_params[:'name'] = opts[:'name'] if opts[:'name']

      # 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 = ['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 = nil
      
      auth_names = ['PureCloud OAuth']
      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 => 'AuthzDivisionEntityListing')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: ObjectsApi#get_authorization_divisions\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Retrieve the home division for the organization.
    # Will not include object counts.
    # @param [Hash] opts the optional parameters
    # @return [AuthzDivision]
    def get_authorization_divisions_home(opts = {})
      data, _status_code, _headers = get_authorization_divisions_home_with_http_info(opts)
      return data
    end

    # Retrieve the home division for the organization.
    # Will not include object counts.
    # @param [Hash] opts the optional parameters
    # @return [Array<(AuthzDivision, Fixnum, Hash)>] AuthzDivision data, response status code and response headers
    def get_authorization_divisions_home_with_http_info(opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: ObjectsApi.get_authorization_divisions_home ..."
      end
      
      # resource path
      local_var_path = "/api/v2/authorization/divisions/home".sub('{format}','json')

      # query parameters
      query_params = {}

      # 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 = ['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 = nil
      
      auth_names = ['PureCloud OAuth']
      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 => 'AuthzDivision')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: ObjectsApi#get_authorization_divisions_home\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Returns the maximum allowed number of divisions.
    # 
    # @param [Hash] opts the optional parameters
    # @return [Integer]
    def get_authorization_divisions_limit(opts = {})
      data, _status_code, _headers = get_authorization_divisions_limit_with_http_info(opts)
      return data
    end

    # Returns the maximum allowed number of divisions.
    # 
    # @param [Hash] opts the optional parameters
    # @return [Array<(Integer, Fixnum, Hash)>] Integer data, response status code and response headers
    def get_authorization_divisions_limit_with_http_info(opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: ObjectsApi.get_authorization_divisions_limit ..."
      end
      
      # resource path
      local_var_path = "/api/v2/authorization/divisions/limit".sub('{format}','json')

      # query parameters
      query_params = {}

      # 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 = ['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 = nil
      
      auth_names = ['PureCloud OAuth']
      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 => 'Integer')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: ObjectsApi#get_authorization_divisions_limit\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Assign a list of objects to a division
    # Set the division of a specified list of objects. The objects must all be of the same type, one of:  CAMPAIGN, MANAGEMENTUNIT, FLOW, QUEUE, or USER.  The body of the request is a list of object IDs, which are expected to be  GUIDs, e.g. [\"206ce31f-61ec-40ed-a8b1-be6f06303998\",\"250a754e-f5e4-4f51-800f-a92f09d3bf8c\"]
    # @param division_id Division ID
    # @param object_type The type of the objects. Must be one of the valid object types
    # @param body Object Id List
    # @param [Hash] opts the optional parameters
    # @return [nil]
    def post_authorization_division_object(division_id, object_type, body, opts = {})
      post_authorization_division_object_with_http_info(division_id, object_type, body, opts)
      return nil
    end

    # Assign a list of objects to a division
    # Set the division of a specified list of objects. The objects must all be of the same type, one of:  CAMPAIGN, MANAGEMENTUNIT, FLOW, QUEUE, or USER.  The body of the request is a list of object IDs, which are expected to be  GUIDs, e.g. [\&quot;206ce31f-61ec-40ed-a8b1-be6f06303998\&quot;,\&quot;250a754e-f5e4-4f51-800f-a92f09d3bf8c\&quot;]
    # @param division_id Division ID
    # @param object_type The type of the objects. Must be one of the valid object types
    # @param body Object Id List
    # @param [Hash] opts the optional parameters
    # @return [Array<(nil, Fixnum, Hash)>] nil, response status code and response headers
    def post_authorization_division_object_with_http_info(division_id, object_type, body, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: ObjectsApi.post_authorization_division_object ..."
      end
      
      
      # verify the required parameter 'division_id' is set
      fail ArgumentError, "Missing the required parameter 'division_id' when calling ObjectsApi.post_authorization_division_object" if division_id.nil?
      
      
      
      
      
      
      # verify the required parameter 'object_type' is set
      fail ArgumentError, "Missing the required parameter 'object_type' when calling ObjectsApi.post_authorization_division_object" if object_type.nil?
      
      # verify enum value
      unless ['QUEUE', 'CAMPAIGN', 'CONTACTLIST', 'DNCLIST', 'MESSAGINGCAMPAIGN', 'MANAGEMENTUNIT', 'BUSINESSUNIT', 'FLOW', 'USER'].include?(object_type)
        fail ArgumentError, "invalid value for 'object_type', must be one of QUEUE, CAMPAIGN, CONTACTLIST, DNCLIST, MESSAGINGCAMPAIGN, MANAGEMENTUNIT, BUSINESSUNIT, FLOW, USER"
      end
      
      
      
      
      
      
      # verify the required parameter 'body' is set
      fail ArgumentError, "Missing the required parameter 'body' when calling ObjectsApi.post_authorization_division_object" if body.nil?
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/authorization/divisions/{divisionId}/objects/{objectType}".sub('{format}','json').sub('{' + 'divisionId' + '}', division_id.to_s).sub('{' + 'objectType' + '}', object_type.to_s)

      # query parameters
      query_params = {}

      # 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 = ['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(body)
      
      auth_names = ['PureCloud OAuth']
      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)
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: ObjectsApi#post_authorization_division_object\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Create a division.
    # 
    # @param body Division
    # @param [Hash] opts the optional parameters
    # @return [AuthzDivision]
    def post_authorization_divisions(body, opts = {})
      data, _status_code, _headers = post_authorization_divisions_with_http_info(body, opts)
      return data
    end

    # Create a division.
    # 
    # @param body Division
    # @param [Hash] opts the optional parameters
    # @return [Array<(AuthzDivision, Fixnum, Hash)>] AuthzDivision data, response status code and response headers
    def post_authorization_divisions_with_http_info(body, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: ObjectsApi.post_authorization_divisions ..."
      end
      
      
      # verify the required parameter 'body' is set
      fail ArgumentError, "Missing the required parameter 'body' when calling ObjectsApi.post_authorization_divisions" if body.nil?
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/authorization/divisions".sub('{format}','json')

      # query parameters
      query_params = {}

      # 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 = ['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(body)
      
      auth_names = ['PureCloud OAuth']
      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 => 'AuthzDivision')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: ObjectsApi#post_authorization_divisions\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Update a division.
    # 
    # @param division_id Division ID
    # @param body Updated division data
    # @param [Hash] opts the optional parameters
    # @return [AuthzDivision]
    def put_authorization_division(division_id, body, opts = {})
      data, _status_code, _headers = put_authorization_division_with_http_info(division_id, body, opts)
      return data
    end

    # Update a division.
    # 
    # @param division_id Division ID
    # @param body Updated division data
    # @param [Hash] opts the optional parameters
    # @return [Array<(AuthzDivision, Fixnum, Hash)>] AuthzDivision data, response status code and response headers
    def put_authorization_division_with_http_info(division_id, body, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: ObjectsApi.put_authorization_division ..."
      end
      
      
      # verify the required parameter 'division_id' is set
      fail ArgumentError, "Missing the required parameter 'division_id' when calling ObjectsApi.put_authorization_division" if division_id.nil?
      
      
      
      
      
      
      # verify the required parameter 'body' is set
      fail ArgumentError, "Missing the required parameter 'body' when calling ObjectsApi.put_authorization_division" if body.nil?
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/authorization/divisions/{divisionId}".sub('{format}','json').sub('{' + 'divisionId' + '}', division_id.to_s)

      # query parameters
      query_params = {}

      # 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 = ['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(body)
      
      auth_names = ['PureCloud OAuth']
      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 => 'AuthzDivision')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: ObjectsApi#put_authorization_division\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end
  end
end