=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 GroupsApi
    attr_accessor :api_client

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

    # Delete group
    # 
    # @param group_id Group ID
    # @param [Hash] opts the optional parameters
    # @return [nil]
    def delete_group(group_id, opts = {})
      delete_group_with_http_info(group_id, opts)
      return nil
    end

    # Delete group
    # 
    # @param group_id Group ID
    # @param [Hash] opts the optional parameters
    # @return [Array<(nil, Fixnum, Hash)>] nil, response status code and response headers
    def delete_group_with_http_info(group_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: GroupsApi.delete_group ..."
      end
      
      
      # verify the required parameter 'group_id' is set
      fail ArgumentError, "Missing the required parameter 'group_id' when calling GroupsApi.delete_group" if group_id.nil?
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/groups/{groupId}".sub('{format}','json').sub('{' + 'groupId' + '}', group_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 = 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: GroupsApi#delete_group\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Remove members
    # 
    # @param group_id Group ID
    # @param ids Comma separated list of userIds to remove
    # @param [Hash] opts the optional parameters
    # @return [Empty]
    def delete_group_members(group_id, ids, opts = {})
      data, _status_code, _headers = delete_group_members_with_http_info(group_id, ids, opts)
      return data
    end

    # Remove members
    # 
    # @param group_id Group ID
    # @param ids Comma separated list of userIds to remove
    # @param [Hash] opts the optional parameters
    # @return [Array<(Empty, Fixnum, Hash)>] Empty data, response status code and response headers
    def delete_group_members_with_http_info(group_id, ids, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: GroupsApi.delete_group_members ..."
      end
      
      
      # verify the required parameter 'group_id' is set
      fail ArgumentError, "Missing the required parameter 'group_id' when calling GroupsApi.delete_group_members" if group_id.nil?
      
      
      
      
      
      
      # verify the required parameter 'ids' is set
      fail ArgumentError, "Missing the required parameter 'ids' when calling GroupsApi.delete_group_members" if ids.nil?
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/groups/{groupId}/members".sub('{format}','json').sub('{' + 'groupId' + '}', group_id.to_s)

      # query parameters
      query_params = {}
      query_params[:'ids'] = ids

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

    # Fetch field config for an entity type
    # 
    # @param type Field type
    # @param [Hash] opts the optional parameters
    # @return [FieldConfig]
    def get_fieldconfig(type, opts = {})
      data, _status_code, _headers = get_fieldconfig_with_http_info(type, opts)
      return data
    end

    # Fetch field config for an entity type
    # 
    # @param type Field type
    # @param [Hash] opts the optional parameters
    # @return [Array<(FieldConfig, Fixnum, Hash)>] FieldConfig data, response status code and response headers
    def get_fieldconfig_with_http_info(type, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: GroupsApi.get_fieldconfig ..."
      end
      
      
      # verify the required parameter 'type' is set
      fail ArgumentError, "Missing the required parameter 'type' when calling GroupsApi.get_fieldconfig" if type.nil?
      
      # verify enum value
      unless ['person', 'group', 'org', 'externalContact'].include?(type)
        fail ArgumentError, "invalid value for 'type', must be one of person, group, org, externalContact"
      end
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/fieldconfig".sub('{format}','json')

      # query parameters
      query_params = {}
      query_params[:'type'] = type

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

    # Get group
    # 
    # @param group_id Group ID
    # @param [Hash] opts the optional parameters
    # @return [Group]
    def get_group(group_id, opts = {})
      data, _status_code, _headers = get_group_with_http_info(group_id, opts)
      return data
    end

    # Get group
    # 
    # @param group_id Group ID
    # @param [Hash] opts the optional parameters
    # @return [Array<(Group, Fixnum, Hash)>] Group data, response status code and response headers
    def get_group_with_http_info(group_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: GroupsApi.get_group ..."
      end
      
      
      # verify the required parameter 'group_id' is set
      fail ArgumentError, "Missing the required parameter 'group_id' when calling GroupsApi.get_group" if group_id.nil?
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/groups/{groupId}".sub('{format}','json').sub('{' + 'groupId' + '}', group_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 = 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 => 'Group')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: GroupsApi#get_group\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Get all individuals associated with the group
    # 
    # @param group_id Group ID
    # @param [Hash] opts the optional parameters
    # @return [UserEntityListing]
    def get_group_individuals(group_id, opts = {})
      data, _status_code, _headers = get_group_individuals_with_http_info(group_id, opts)
      return data
    end

    # Get all individuals associated with the group
    # 
    # @param group_id Group ID
    # @param [Hash] opts the optional parameters
    # @return [Array<(UserEntityListing, Fixnum, Hash)>] UserEntityListing data, response status code and response headers
    def get_group_individuals_with_http_info(group_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: GroupsApi.get_group_individuals ..."
      end
      
      
      # verify the required parameter 'group_id' is set
      fail ArgumentError, "Missing the required parameter 'group_id' when calling GroupsApi.get_group_individuals" if group_id.nil?
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/groups/{groupId}/individuals".sub('{format}','json').sub('{' + 'groupId' + '}', group_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 = 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 => 'UserEntityListing')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: GroupsApi#get_group_individuals\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Get group members, includes individuals, owners, and dynamically included people
    # 
    # @param group_id Group ID
    # @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)
    # @option opts [String] :sort_order Ascending or descending sort order (default to ASC)
    # @option opts [Array<String>] :expand Which fields, if any, to expand
    # @return [UserEntityListing]
    def get_group_members(group_id, opts = {})
      data, _status_code, _headers = get_group_members_with_http_info(group_id, opts)
      return data
    end

    # Get group members, includes individuals, owners, and dynamically included people
    # 
    # @param group_id Group ID
    # @param [Hash] opts the optional parameters
    # @option opts [Integer] :page_size Page size
    # @option opts [Integer] :page_number Page number
    # @option opts [String] :sort_order Ascending or descending sort order
    # @option opts [Array<String>] :expand Which fields, if any, to expand
    # @return [Array<(UserEntityListing, Fixnum, Hash)>] UserEntityListing data, response status code and response headers
    def get_group_members_with_http_info(group_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: GroupsApi.get_group_members ..."
      end
      
      
      # verify the required parameter 'group_id' is set
      fail ArgumentError, "Missing the required parameter 'group_id' when calling GroupsApi.get_group_members" if group_id.nil?
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      if opts[:'sort_order'] && !['ascending', 'descending'].include?(opts[:'sort_order'])
        fail ArgumentError, 'invalid value for "sort_order", must be one of ascending, descending'
      end
      
      
      
      
      
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/groups/{groupId}/members".sub('{format}','json').sub('{' + 'groupId' + '}', group_id.to_s)

      # 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[:'sortOrder'] = opts[:'sort_order'] if opts[:'sort_order']
      query_params[:'expand'] = @api_client.build_collection_param(opts[:'expand'], :multi) if opts[:'expand']

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

    # Get group profile
    # This api is deprecated. Use /api/v2/groups instead
    # @param group_id groupId
    # @param [Hash] opts the optional parameters
    # @option opts [String] :fields Comma separated fields to return.  Allowable values can be found by querying /api/v2/fieldconfig?type=group and using the key for the elements returned by the fieldList
    # @return [GroupProfile]
    def get_group_profile(group_id, opts = {})
      data, _status_code, _headers = get_group_profile_with_http_info(group_id, opts)
      return data
    end

    # Get group profile
    # This api is deprecated. Use /api/v2/groups instead
    # @param group_id groupId
    # @param [Hash] opts the optional parameters
    # @option opts [String] :fields Comma separated fields to return.  Allowable values can be found by querying /api/v2/fieldconfig?type=group and using the key for the elements returned by the fieldList
    # @return [Array<(GroupProfile, Fixnum, Hash)>] GroupProfile data, response status code and response headers
    def get_group_profile_with_http_info(group_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: GroupsApi.get_group_profile ..."
      end
      
      
      # verify the required parameter 'group_id' is set
      fail ArgumentError, "Missing the required parameter 'group_id' when calling GroupsApi.get_group_profile" if group_id.nil?
      
      
      
      
      
      
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/groups/{groupId}/profile".sub('{format}','json').sub('{' + 'groupId' + '}', group_id.to_s)

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

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

    # Get a group list
    # 
    # @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)
    # @option opts [Array<String>] :id id
    # @option opts [Array<String>] :jabber_id A list of jabberIds to fetch by bulk (cannot be used with the \&quot;id\&quot; parameter)
    # @option opts [String] :sort_order Ascending or descending sort order (default to ASC)
    # @return [GroupEntityListing]
    def get_groups(opts = {})
      data, _status_code, _headers = get_groups_with_http_info(opts)
      return data
    end

    # Get a group list
    # 
    # @param [Hash] opts the optional parameters
    # @option opts [Integer] :page_size Page size
    # @option opts [Integer] :page_number Page number
    # @option opts [Array<String>] :id id
    # @option opts [Array<String>] :jabber_id A list of jabberIds to fetch by bulk (cannot be used with the \&quot;id\&quot; parameter)
    # @option opts [String] :sort_order Ascending or descending sort order
    # @return [Array<(GroupEntityListing, Fixnum, Hash)>] GroupEntityListing data, response status code and response headers
    def get_groups_with_http_info(opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: GroupsApi.get_groups ..."
      end
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      if opts[:'sort_order'] && !['ascending', 'descending'].include?(opts[:'sort_order'])
        fail ArgumentError, 'invalid value for "sort_order", must be one of ascending, descending'
      end
      
      
      
      
      # resource path
      local_var_path = "/api/v2/groups".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[:'id'] = @api_client.build_collection_param(opts[:'id'], :multi) if opts[:'id']
      query_params[:'jabberId'] = @api_client.build_collection_param(opts[:'jabber_id'], :multi) if opts[:'jabber_id']
      query_params[:'sortOrder'] = opts[:'sort_order'] if opts[:'sort_order']

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

    # Search groups using the q64 value returned from a previous search
    # 
    # @param q64 q64
    # @param [Hash] opts the optional parameters
    # @option opts [Array<String>] :expand expand
    # @return [GroupsSearchResponse]
    def get_groups_search(q64, opts = {})
      data, _status_code, _headers = get_groups_search_with_http_info(q64, opts)
      return data
    end

    # Search groups using the q64 value returned from a previous search
    # 
    # @param q64 q64
    # @param [Hash] opts the optional parameters
    # @option opts [Array<String>] :expand expand
    # @return [Array<(GroupsSearchResponse, Fixnum, Hash)>] GroupsSearchResponse data, response status code and response headers
    def get_groups_search_with_http_info(q64, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: GroupsApi.get_groups_search ..."
      end
      
      
      # verify the required parameter 'q64' is set
      fail ArgumentError, "Missing the required parameter 'q64' when calling GroupsApi.get_groups_search" if q64.nil?
      
      
      
      
      
      
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/groups/search".sub('{format}','json')

      # query parameters
      query_params = {}
      query_params[:'q64'] = q64
      query_params[:'expand'] = @api_client.build_collection_param(opts[:'expand'], :multi) if opts[:'expand']

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

    # Get group profile listing
    # This api is deprecated. Use /api/v2/groups instead.
    # @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)
    # @option opts [Array<String>] :id id
    # @option opts [String] :sort_order Ascending or descending sort order (default to ASC)
    # @return [GroupProfileEntityListing]
    def get_profiles_groups(opts = {})
      data, _status_code, _headers = get_profiles_groups_with_http_info(opts)
      return data
    end

    # Get group profile listing
    # This api is deprecated. Use /api/v2/groups instead.
    # @param [Hash] opts the optional parameters
    # @option opts [Integer] :page_size Page size
    # @option opts [Integer] :page_number Page number
    # @option opts [Array<String>] :id id
    # @option opts [String] :sort_order Ascending or descending sort order
    # @return [Array<(GroupProfileEntityListing, Fixnum, Hash)>] GroupProfileEntityListing data, response status code and response headers
    def get_profiles_groups_with_http_info(opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: GroupsApi.get_profiles_groups ..."
      end
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      if opts[:'sort_order'] && !['ascending', 'descending'].include?(opts[:'sort_order'])
        fail ArgumentError, 'invalid value for "sort_order", must be one of ascending, descending'
      end
      
      
      
      
      # resource path
      local_var_path = "/api/v2/profiles/groups".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[:'id'] = @api_client.build_collection_param(opts[:'id'], :multi) if opts[:'id']
      query_params[:'sortOrder'] = opts[:'sort_order'] if opts[:'sort_order']

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

    # Add members
    # 
    # @param group_id Group ID
    # @param body Add members
    # @param [Hash] opts the optional parameters
    # @return [Empty]
    def post_group_members(group_id, body, opts = {})
      data, _status_code, _headers = post_group_members_with_http_info(group_id, body, opts)
      return data
    end

    # Add members
    # 
    # @param group_id Group ID
    # @param body Add members
    # @param [Hash] opts the optional parameters
    # @return [Array<(Empty, Fixnum, Hash)>] Empty data, response status code and response headers
    def post_group_members_with_http_info(group_id, body, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: GroupsApi.post_group_members ..."
      end
      
      
      # verify the required parameter 'group_id' is set
      fail ArgumentError, "Missing the required parameter 'group_id' when calling GroupsApi.post_group_members" if group_id.nil?
      
      
      
      
      
      
      # verify the required parameter 'body' is set
      fail ArgumentError, "Missing the required parameter 'body' when calling GroupsApi.post_group_members" if body.nil?
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/groups/{groupId}/members".sub('{format}','json').sub('{' + 'groupId' + '}', group_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(: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 => 'Empty')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: GroupsApi#post_group_members\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Create a group
    # 
    # @param body Group
    # @param [Hash] opts the optional parameters
    # @return [Group]
    def post_groups(body, opts = {})
      data, _status_code, _headers = post_groups_with_http_info(body, opts)
      return data
    end

    # Create a group
    # 
    # @param body Group
    # @param [Hash] opts the optional parameters
    # @return [Array<(Group, Fixnum, Hash)>] Group data, response status code and response headers
    def post_groups_with_http_info(body, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: GroupsApi.post_groups ..."
      end
      
      
      # verify the required parameter 'body' is set
      fail ArgumentError, "Missing the required parameter 'body' when calling GroupsApi.post_groups" if body.nil?
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/groups".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 => 'Group')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: GroupsApi#post_groups\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Search groups
    # 
    # @param body Search request options
    # @param [Hash] opts the optional parameters
    # @return [GroupsSearchResponse]
    def post_groups_search(body, opts = {})
      data, _status_code, _headers = post_groups_search_with_http_info(body, opts)
      return data
    end

    # Search groups
    # 
    # @param body Search request options
    # @param [Hash] opts the optional parameters
    # @return [Array<(GroupsSearchResponse, Fixnum, Hash)>] GroupsSearchResponse data, response status code and response headers
    def post_groups_search_with_http_info(body, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: GroupsApi.post_groups_search ..."
      end
      
      
      # verify the required parameter 'body' is set
      fail ArgumentError, "Missing the required parameter 'body' when calling GroupsApi.post_groups_search" if body.nil?
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/groups/search".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 => 'GroupsSearchResponse')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: GroupsApi#post_groups_search\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Update group
    # 
    # @param group_id Group ID
    # @param [Hash] opts the optional parameters
    # @option opts [GroupUpdate] :body Group
    # @return [Group]
    def put_group(group_id, opts = {})
      data, _status_code, _headers = put_group_with_http_info(group_id, opts)
      return data
    end

    # Update group
    # 
    # @param group_id Group ID
    # @param [Hash] opts the optional parameters
    # @option opts [GroupUpdate] :body Group
    # @return [Array<(Group, Fixnum, Hash)>] Group data, response status code and response headers
    def put_group_with_http_info(group_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: GroupsApi.put_group ..."
      end
      
      
      # verify the required parameter 'group_id' is set
      fail ArgumentError, "Missing the required parameter 'group_id' when calling GroupsApi.put_group" if group_id.nil?
      
      
      
      
      
      
      
      
      
      
      
      # resource path
      local_var_path = "/api/v2/groups/{groupId}".sub('{format}','json').sub('{' + 'groupId' + '}', group_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(opts[:'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 => 'Group')
      if @api_client.config.debugging
        @api_client.config.logger.debug "API called: GroupsApi#put_group\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end
  end
end
