=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@inin.com
Generated by: https://github.com/swagger-api/swagger-codegen.git

License: ININ
http://www.inin.com

Terms of Service: https://developer.mypurecloud.com/tos

=end

require "uri"

module PureCloud
  class AuthorizationApi
    attr_accessor :api_client

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

    # Delete an organization role.
    # 
    # @param role_id Role ID
    # @param [Hash] opts the optional parameters
    # @return [nil]
    def delete_roles_role_id(role_id, opts = {})
      delete_roles_role_id_with_http_info(role_id, opts)
      return nil
    end

    # Delete an organization role.
    # 
    # @param role_id Role ID
    # @param [Hash] opts the optional parameters
    # @return [Array<(nil, Fixnum, Hash)>] nil, response status code and response headers
    def delete_roles_role_id_with_http_info(role_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: AuthorizationApi#delete_roles_role_id ..."
      end
      
      # verify the required parameter 'role_id' is set
      fail "Missing the required parameter 'role_id' when calling delete_roles_role_id" if role_id.nil?
      
      # resource path
      local_var_path = "/api/v2/authorization/roles/{roleId}".sub('{format}','json').sub('{' + 'roleId' + '}', role_id.to_s)

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

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

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

      # form parameters
      form_params = {}

      # http body (model)
      post_body = nil
      
      auth_names = ['PureCloud Auth']
      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: AuthorizationApi#delete_roles_role_id\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Removes all the roles from the user.
    # 
    # @param user_id User ID
    # @param [Hash] opts the optional parameters
    # @return [nil]
    def delete_user_id_roles(user_id, opts = {})
      delete_user_id_roles_with_http_info(user_id, opts)
      return nil
    end

    # Removes all the roles from the user.
    # 
    # @param user_id User ID
    # @param [Hash] opts the optional parameters
    # @return [Array<(nil, Fixnum, Hash)>] nil, response status code and response headers
    def delete_user_id_roles_with_http_info(user_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: AuthorizationApi#delete_user_id_roles ..."
      end
      
      # verify the required parameter 'user_id' is set
      fail "Missing the required parameter 'user_id' when calling delete_user_id_roles" if user_id.nil?
      
      # resource path
      local_var_path = "/api/v2/users/{userId}/roles".sub('{format}','json').sub('{' + 'userId' + '}', user_id.to_s)

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

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

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

      # form parameters
      form_params = {}

      # http body (model)
      post_body = nil
      
      auth_names = ['PureCloud Auth']
      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: AuthorizationApi#delete_user_id_roles\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Get all permissions.
    # Retrieve a list of all permission defined in the system.
    # @param [Hash] opts the optional parameters
    # @option opts [Integer] :page_size Page size (default to 25)
    # @option opts [Integer] :page_number Page number (default to 1)
    # @return [PermissionCollectionEntityListing]
    def get_permissions(opts = {})
      data, status_code, headers = get_permissions_with_http_info(opts)
      return data
    end

    # Get all permissions.
    # Retrieve a list of all permission defined in the system.
    # @param [Hash] opts the optional parameters
    # @option opts [Integer] :page_size Page size
    # @option opts [Integer] :page_number Page number
    # @return [Array<(PermissionCollectionEntityListing, Fixnum, Hash)>] PermissionCollectionEntityListing data, response status code and response headers
    def get_permissions_with_http_info(opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: AuthorizationApi#get_permissions ..."
      end
      
      # resource path
      local_var_path = "/api/v2/authorization/permissions".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']

      # header parameters
      header_params = {}

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

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

      # form parameters
      form_params = {}

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

    # Get the list of enabled products
    # Gets the list of enabled products. Some example product names are: collaborateFree, collaboratePro, communicate, and engage.
    # @param [Hash] opts the optional parameters
    # @return [OrganizationProductEntityListing]
    def get_products(opts = {})
      data, status_code, headers = get_products_with_http_info(opts)
      return data
    end

    # Get the list of enabled products
    # Gets the list of enabled products. Some example product names are: collaborateFree, collaboratePro, communicate, and engage.
    # @param [Hash] opts the optional parameters
    # @return [Array<(OrganizationProductEntityListing, Fixnum, Hash)>] OrganizationProductEntityListing data, response status code and response headers
    def get_products_with_http_info(opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: AuthorizationApi#get_products ..."
      end
      
      # resource path
      local_var_path = "/api/v2/authorization/products".sub('{format}','json')

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

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

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

      # form parameters
      form_params = {}

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

    # Retrieve a list of all roles defined for the organization
    # 
    # @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 [Array<String>] :permission 
    # @option opts [BOOLEAN] :user_count  (default to true)
    # @return [OrganizationRoleEntityListing]
    def get_roles(opts = {})
      data, status_code, headers = get_roles_with_http_info(opts)
      return data
    end

    # Retrieve a list of all roles defined for the organization
    # 
    # @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 [Array<String>] :permission 
    # @option opts [BOOLEAN] :user_count 
    # @return [Array<(OrganizationRoleEntityListing, Fixnum, Hash)>] OrganizationRoleEntityListing data, response status code and response headers
    def get_roles_with_http_info(opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: AuthorizationApi#get_roles ..."
      end
      
      # resource path
      local_var_path = "/api/v2/authorization/roles".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[:'permission'] = @api_client.build_collection_param(opts[:'permission'], :multi) if opts[:'permission']
      query_params[:'userCount'] = opts[:'user_count'] if opts[:'user_count']

      # header parameters
      header_params = {}

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

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

      # form parameters
      form_params = {}

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

    # Get an org role to default role comparison comparison
    # Compares any organization role to a default role id and show differences
    # @param left_role_id Left Role ID
    # @param right_role_id Right Role id
    # @param [Hash] opts the optional parameters
    # @return [DomainOrgRoleDifference]
    def get_roles_leftrole_id_comparedefault_rightrole_id(left_role_id, right_role_id, opts = {})
      data, status_code, headers = get_roles_leftrole_id_comparedefault_rightrole_id_with_http_info(left_role_id, right_role_id, opts)
      return data
    end

    # Get an org role to default role comparison comparison
    # Compares any organization role to a default role id and show differences
    # @param left_role_id Left Role ID
    # @param right_role_id Right Role id
    # @param [Hash] opts the optional parameters
    # @return [Array<(DomainOrgRoleDifference, Fixnum, Hash)>] DomainOrgRoleDifference data, response status code and response headers
    def get_roles_leftrole_id_comparedefault_rightrole_id_with_http_info(left_role_id, right_role_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: AuthorizationApi#get_roles_leftrole_id_comparedefault_rightrole_id ..."
      end
      
      # verify the required parameter 'left_role_id' is set
      fail "Missing the required parameter 'left_role_id' when calling get_roles_leftrole_id_comparedefault_rightrole_id" if left_role_id.nil?
      
      # verify the required parameter 'right_role_id' is set
      fail "Missing the required parameter 'right_role_id' when calling get_roles_leftrole_id_comparedefault_rightrole_id" if right_role_id.nil?
      
      # resource path
      local_var_path = "/api/v2/authorization/roles/{leftRoleId}/comparedefault/{rightRoleId}".sub('{format}','json').sub('{' + 'leftRoleId' + '}', left_role_id.to_s).sub('{' + 'rightRoleId' + '}', right_role_id.to_s)

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

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

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

      # form parameters
      form_params = {}

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

    # Get a single organization role.
    # Get the organization role specified by its ID.
    # @param role_id Role ID
    # @param [Hash] opts the optional parameters
    # @return [DomainOrganizationRole]
    def get_roles_role_id(role_id, opts = {})
      data, status_code, headers = get_roles_role_id_with_http_info(role_id, opts)
      return data
    end

    # Get a single organization role.
    # Get the organization role specified by its ID.
    # @param role_id Role ID
    # @param [Hash] opts the optional parameters
    # @return [Array<(DomainOrganizationRole, Fixnum, Hash)>] DomainOrganizationRole data, response status code and response headers
    def get_roles_role_id_with_http_info(role_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: AuthorizationApi#get_roles_role_id ..."
      end
      
      # verify the required parameter 'role_id' is set
      fail "Missing the required parameter 'role_id' when calling get_roles_role_id" if role_id.nil?
      
      # resource path
      local_var_path = "/api/v2/authorization/roles/{roleId}".sub('{format}','json').sub('{' + 'roleId' + '}', role_id.to_s)

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

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

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

      # form parameters
      form_params = {}

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

    # Returns a listing of roles and permissions for a user.
    # 
    # @param user_id User ID
    # @param [Hash] opts the optional parameters
    # @return [UserAuthorization]
    def get_user_id_roles(user_id, opts = {})
      data, status_code, headers = get_user_id_roles_with_http_info(user_id, opts)
      return data
    end

    # Returns a listing of roles and permissions for a user.
    # 
    # @param user_id User ID
    # @param [Hash] opts the optional parameters
    # @return [Array<(UserAuthorization, Fixnum, Hash)>] UserAuthorization data, response status code and response headers
    def get_user_id_roles_with_http_info(user_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: AuthorizationApi#get_user_id_roles ..."
      end
      
      # verify the required parameter 'user_id' is set
      fail "Missing the required parameter 'user_id' when calling get_user_id_roles" if user_id.nil?
      
      # resource path
      local_var_path = "/api/v2/users/{userId}/roles".sub('{format}','json').sub('{' + 'userId' + '}', user_id.to_s)

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

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

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

      # form parameters
      form_params = {}

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

    # Patch Organization Role for needsUpdate Field
    # Patch Organization Role for needsUpdate Field
    # @param role_id Role ID
    # @param [Hash] opts the optional parameters
    # @option opts [DomainOrganizationRole] :body 
    # @return [DomainOrganizationRole]
    def patch_roles_role_id(role_id, opts = {})
      data, status_code, headers = patch_roles_role_id_with_http_info(role_id, opts)
      return data
    end

    # Patch Organization Role for needsUpdate Field
    # Patch Organization Role for needsUpdate Field
    # @param role_id Role ID
    # @param [Hash] opts the optional parameters
    # @option opts [DomainOrganizationRole] :body 
    # @return [Array<(DomainOrganizationRole, Fixnum, Hash)>] DomainOrganizationRole data, response status code and response headers
    def patch_roles_role_id_with_http_info(role_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: AuthorizationApi#patch_roles_role_id ..."
      end
      
      # verify the required parameter 'role_id' is set
      fail "Missing the required parameter 'role_id' when calling patch_roles_role_id" if role_id.nil?
      
      # resource path
      local_var_path = "/api/v2/authorization/roles/{roleId}".sub('{format}','json').sub('{' + 'roleId' + '}', role_id.to_s)

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

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

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

      # form parameters
      form_params = {}

      # http body (model)
      post_body = @api_client.object_to_http_body(opts[:'body'])
      
      auth_names = ['PureCloud Auth']
      data, status_code, headers = @api_client.call_api(:PATCH, local_var_path,
        :header_params => header_params,
        :query_params => query_params,
        :form_params => form_params,
        :body => post_body,
        :auth_names => auth_names,
        :return_type => 'DomainOrganizationRole')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: AuthorizationApi#patch_roles_role_id\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Create an organization role.
    # 
    # @param [Hash] opts the optional parameters
    # @option opts [DomainOrganizationRole] :body 
    # @return [DomainOrganizationRole]
    def post_roles(opts = {})
      data, status_code, headers = post_roles_with_http_info(opts)
      return data
    end

    # Create an organization role.
    # 
    # @param [Hash] opts the optional parameters
    # @option opts [DomainOrganizationRole] :body 
    # @return [Array<(DomainOrganizationRole, Fixnum, Hash)>] DomainOrganizationRole data, response status code and response headers
    def post_roles_with_http_info(opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: AuthorizationApi#post_roles ..."
      end
      
      # resource path
      local_var_path = "/api/v2/authorization/roles".sub('{format}','json')

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

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

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

      # form parameters
      form_params = {}

      # http body (model)
      post_body = @api_client.object_to_http_body(opts[:'body'])
      
      auth_names = ['PureCloud Auth']
      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 => 'DomainOrganizationRole')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: AuthorizationApi#post_roles\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Restores all default roles
    # This endpoint serves several purposes. 1. It provides the org with default roles. This is important for default roles that will be added after go-live (they can retroactively add the new default-role). Note: When not using a query param of force=true, it only adds the default roles not configured for the org; it does not overwrite roles. 2. Using the query param force=true, you can restore all default roles. Note: This does not have an effect on custom roles.
    # @param [Hash] opts the optional parameters
    # @option opts [BOOLEAN] :force Restore default roles (default to false)
    # @return [OrganizationRoleEntityListing]
    def post_roles_default(opts = {})
      data, status_code, headers = post_roles_default_with_http_info(opts)
      return data
    end

    # Restores all default roles
    # This endpoint serves several purposes. 1. It provides the org with default roles. This is important for default roles that will be added after go-live (they can retroactively add the new default-role). Note: When not using a query param of force=true, it only adds the default roles not configured for the org; it does not overwrite roles. 2. Using the query param force=true, you can restore all default roles. Note: This does not have an effect on custom roles.
    # @param [Hash] opts the optional parameters
    # @option opts [BOOLEAN] :force Restore default roles
    # @return [Array<(OrganizationRoleEntityListing, Fixnum, Hash)>] OrganizationRoleEntityListing data, response status code and response headers
    def post_roles_default_with_http_info(opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: AuthorizationApi#post_roles_default ..."
      end
      
      # resource path
      local_var_path = "/api/v2/authorization/roles/default".sub('{format}','json')

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

      # header parameters
      header_params = {}

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

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

      # form parameters
      form_params = {}

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

    #  Get an unsaved org role to default role comparison
    # Allows users to compare their existing roles in an unsaved state to its default role
    # @param left_role_id Left Role ID
    # @param right_role_id Right Role id
    # @param [Hash] opts the optional parameters
    # @option opts [DomainOrganizationRole] :body 
    # @return [DomainOrgRoleDifference]
    def post_roles_leftrole_id_comparedefault_rightrole_id(left_role_id, right_role_id, opts = {})
      data, status_code, headers = post_roles_leftrole_id_comparedefault_rightrole_id_with_http_info(left_role_id, right_role_id, opts)
      return data
    end

    #  Get an unsaved org role to default role comparison
    # Allows users to compare their existing roles in an unsaved state to its default role
    # @param left_role_id Left Role ID
    # @param right_role_id Right Role id
    # @param [Hash] opts the optional parameters
    # @option opts [DomainOrganizationRole] :body 
    # @return [Array<(DomainOrgRoleDifference, Fixnum, Hash)>] DomainOrgRoleDifference data, response status code and response headers
    def post_roles_leftrole_id_comparedefault_rightrole_id_with_http_info(left_role_id, right_role_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: AuthorizationApi#post_roles_leftrole_id_comparedefault_rightrole_id ..."
      end
      
      # verify the required parameter 'left_role_id' is set
      fail "Missing the required parameter 'left_role_id' when calling post_roles_leftrole_id_comparedefault_rightrole_id" if left_role_id.nil?
      
      # verify the required parameter 'right_role_id' is set
      fail "Missing the required parameter 'right_role_id' when calling post_roles_leftrole_id_comparedefault_rightrole_id" if right_role_id.nil?
      
      # resource path
      local_var_path = "/api/v2/authorization/roles/{leftRoleId}/comparedefault/{rightRoleId}".sub('{format}','json').sub('{' + 'leftRoleId' + '}', left_role_id.to_s).sub('{' + 'rightRoleId' + '}', right_role_id.to_s)

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

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

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

      # form parameters
      form_params = {}

      # http body (model)
      post_body = @api_client.object_to_http_body(opts[:'body'])
      
      auth_names = ['PureCloud Auth']
      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 => 'DomainOrgRoleDifference')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: AuthorizationApi#post_roles_leftrole_id_comparedefault_rightrole_id\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Restore specified default roles
    # 
    # @param [Hash] opts the optional parameters
    # @option opts [Array<DomainOrganizationRole>] :body 
    # @return [OrganizationRoleEntityListing]
    def put_roles_default(opts = {})
      data, status_code, headers = put_roles_default_with_http_info(opts)
      return data
    end

    # Restore specified default roles
    # 
    # @param [Hash] opts the optional parameters
    # @option opts [Array<DomainOrganizationRole>] :body 
    # @return [Array<(OrganizationRoleEntityListing, Fixnum, Hash)>] OrganizationRoleEntityListing data, response status code and response headers
    def put_roles_default_with_http_info(opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: AuthorizationApi#put_roles_default ..."
      end
      
      # resource path
      local_var_path = "/api/v2/authorization/roles/default".sub('{format}','json')

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

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

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

      # form parameters
      form_params = {}

      # http body (model)
      post_body = @api_client.object_to_http_body(opts[:'body'])
      
      auth_names = ['PureCloud Auth']
      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 => 'OrganizationRoleEntityListing')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: AuthorizationApi#put_roles_default\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Update an organization role.
    # Update
    # @param role_id Role ID
    # @param [Hash] opts the optional parameters
    # @option opts [DomainOrganizationRole] :body 
    # @return [DomainOrganizationRole]
    def put_roles_role_id(role_id, opts = {})
      data, status_code, headers = put_roles_role_id_with_http_info(role_id, opts)
      return data
    end

    # Update an organization role.
    # Update
    # @param role_id Role ID
    # @param [Hash] opts the optional parameters
    # @option opts [DomainOrganizationRole] :body 
    # @return [Array<(DomainOrganizationRole, Fixnum, Hash)>] DomainOrganizationRole data, response status code and response headers
    def put_roles_role_id_with_http_info(role_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: AuthorizationApi#put_roles_role_id ..."
      end
      
      # verify the required parameter 'role_id' is set
      fail "Missing the required parameter 'role_id' when calling put_roles_role_id" if role_id.nil?
      
      # resource path
      local_var_path = "/api/v2/authorization/roles/{roleId}".sub('{format}','json').sub('{' + 'roleId' + '}', role_id.to_s)

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

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

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

      # form parameters
      form_params = {}

      # http body (model)
      post_body = @api_client.object_to_http_body(opts[:'body'])
      
      auth_names = ['PureCloud Auth']
      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 => 'DomainOrganizationRole')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: AuthorizationApi#put_roles_role_id\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Sets the users for the role
    # 
    # @param role_id Role ID
    # @param [Hash] opts the optional parameters
    # @option opts [Array<String>] :body 
    # @return [Array<String>]
    def put_roles_role_id_users_add(role_id, opts = {})
      data, status_code, headers = put_roles_role_id_users_add_with_http_info(role_id, opts)
      return data
    end

    # Sets the users for the role
    # 
    # @param role_id Role ID
    # @param [Hash] opts the optional parameters
    # @option opts [Array<String>] :body 
    # @return [Array<(Array<String>, Fixnum, Hash)>] Array<String> data, response status code and response headers
    def put_roles_role_id_users_add_with_http_info(role_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: AuthorizationApi#put_roles_role_id_users_add ..."
      end
      
      # verify the required parameter 'role_id' is set
      fail "Missing the required parameter 'role_id' when calling put_roles_role_id_users_add" if role_id.nil?
      
      # resource path
      local_var_path = "/api/v2/authorization/roles/{roleId}/users/add".sub('{format}','json').sub('{' + 'roleId' + '}', role_id.to_s)

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

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

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

      # form parameters
      form_params = {}

      # http body (model)
      post_body = @api_client.object_to_http_body(opts[:'body'])
      
      auth_names = ['PureCloud Auth']
      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 => 'Array<String>')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: AuthorizationApi#put_roles_role_id_users_add\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Removes the users from the role
    # 
    # @param role_id Role ID
    # @param [Hash] opts the optional parameters
    # @option opts [Array<String>] :body 
    # @return [Array<String>]
    def put_roles_role_id_users_remove(role_id, opts = {})
      data, status_code, headers = put_roles_role_id_users_remove_with_http_info(role_id, opts)
      return data
    end

    # Removes the users from the role
    # 
    # @param role_id Role ID
    # @param [Hash] opts the optional parameters
    # @option opts [Array<String>] :body 
    # @return [Array<(Array<String>, Fixnum, Hash)>] Array<String> data, response status code and response headers
    def put_roles_role_id_users_remove_with_http_info(role_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: AuthorizationApi#put_roles_role_id_users_remove ..."
      end
      
      # verify the required parameter 'role_id' is set
      fail "Missing the required parameter 'role_id' when calling put_roles_role_id_users_remove" if role_id.nil?
      
      # resource path
      local_var_path = "/api/v2/authorization/roles/{roleId}/users/remove".sub('{format}','json').sub('{' + 'roleId' + '}', role_id.to_s)

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

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

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

      # form parameters
      form_params = {}

      # http body (model)
      post_body = @api_client.object_to_http_body(opts[:'body'])
      
      auth_names = ['PureCloud Auth']
      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 => 'Array<String>')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: AuthorizationApi#put_roles_role_id_users_remove\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Sets the user's roles
    # 
    # @param user_id User ID
    # @param [Hash] opts the optional parameters
    # @option opts [Array<String>] :body 
    # @return [UserAuthorization]
    def put_user_id_roles(user_id, opts = {})
      data, status_code, headers = put_user_id_roles_with_http_info(user_id, opts)
      return data
    end

    # Sets the user&#39;s roles
    # 
    # @param user_id User ID
    # @param [Hash] opts the optional parameters
    # @option opts [Array<String>] :body 
    # @return [Array<(UserAuthorization, Fixnum, Hash)>] UserAuthorization data, response status code and response headers
    def put_user_id_roles_with_http_info(user_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: AuthorizationApi#put_user_id_roles ..."
      end
      
      # verify the required parameter 'user_id' is set
      fail "Missing the required parameter 'user_id' when calling put_user_id_roles" if user_id.nil?
      
      # resource path
      local_var_path = "/api/v2/users/{userId}/roles".sub('{format}','json').sub('{' + 'userId' + '}', user_id.to_s)

      # query parameters
      query_params = {}

      # header parameters
      header_params = {}

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

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

      # form parameters
      form_params = {}

      # http body (model)
      post_body = @api_client.object_to_http_body(opts[:'body'])
      
      auth_names = ['PureCloud Auth']
      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 => 'UserAuthorization')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: AuthorizationApi#put_user_id_roles\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end
  end
end