=begin
#EVE Swagger Interface

#An OpenAPI for EVE Online

OpenAPI spec version: 0.4.5

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

=end

require "uri"

module Esi
  class ContactsApi
    attr_accessor :api_client

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

    # Delete contacts
    # Bulk delete contacts  ---  Alternate route: `/v1/characters/{character_id}/contacts/`  Alternate route: `/legacy/characters/{character_id}/contacts/`  Alternate route: `/latest/characters/{character_id}/contacts/` 
    # @param character_id ID for a character
    # @param contact_ids A list of contacts to edit
    # @param [Hash] opts the optional parameters
    # @option opts [String] :datasource The server name you would like data from (default to tranquility)
    # @option opts [String] :token Access token to use, if preferred over a header
    # @option opts [String] :user_agent Client identifier, takes precedence over headers
    # @option opts [String] :x_user_agent Client identifier, takes precedence over User-Agent
    # @return [nil]
    def delete_contacts(character_id, contact_ids, opts = {})
      delete_contacts_with_http_info(character_id, contact_ids, opts)
      return nil
    end

    # Delete contacts
    # Bulk delete contacts  ---  Alternate route: &#x60;/v1/characters/{character_id}/contacts/&#x60;  Alternate route: &#x60;/legacy/characters/{character_id}/contacts/&#x60;  Alternate route: &#x60;/latest/characters/{character_id}/contacts/&#x60; 
    # @param character_id ID for a character
    # @param contact_ids A list of contacts to edit
    # @param [Hash] opts the optional parameters
    # @option opts [String] :datasource The server name you would like data from
    # @option opts [String] :token Access token to use, if preferred over a header
    # @option opts [String] :user_agent Client identifier, takes precedence over headers
    # @option opts [String] :x_user_agent Client identifier, takes precedence over User-Agent
    # @return [Array<(nil, Fixnum, Hash)>] nil, response status code and response headers
    def delete_contacts_with_http_info(character_id, contact_ids, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: ContactsApi.delete_contacts ..."
      end
      # verify the required parameter 'character_id' is set
      fail ArgumentError, "Missing the required parameter 'character_id' when calling ContactsApi.delete_contacts" if character_id.nil?
      # verify the required parameter 'contact_ids' is set
      fail ArgumentError, "Missing the required parameter 'contact_ids' when calling ContactsApi.delete_contacts" if contact_ids.nil?
      if opts[:'datasource'] && !['tranquility', 'singularity'].include?(opts[:'datasource'])
        fail ArgumentError, 'invalid value for "datasource", must be one of tranquility, singularity'
      end
      # resource path
      local_var_path = "/characters/{character_id}/contacts/".sub('{format}','json').sub('{' + 'character_id' + '}', character_id.to_s)

      # query parameters
      query_params = {}
      query_params[:'datasource'] = opts[:'datasource'] if !opts[:'datasource'].nil?
      query_params[:'token'] = opts[:'token'] if !opts[:'token'].nil?
      query_params[:'user_agent'] = opts[:'user_agent'] if !opts[:'user_agent'].nil?

      # header parameters
      header_params = {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
      header_params[:'X-User-Agent'] = opts[:'x_user_agent'] if !opts[:'x_user_agent'].nil?

      # form parameters
      form_params = {}

      # http body (model)
      post_body = @api_client.object_to_http_body(contact_ids)
      auth_names = ['evesso']
      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: ContactsApi#delete_contacts\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
      end
      return data, status_code, headers
    end

    # Get contacts
    # Return contacts of a character  ---  Alternate route: `/v1/characters/{character_id}/contacts/`  Alternate route: `/legacy/characters/{character_id}/contacts/`  Alternate route: `/latest/characters/{character_id}/contacts/`   ---  This route is cached for up to 300 seconds
    # @param character_id ID for a character
    # @param [Hash] opts the optional parameters
    # @option opts [String] :datasource The server name you would like data from (default to tranquility)
    # @option opts [Integer] :page page integer (default to 1)
    # @option opts [String] :token Access token to use, if preferred over a header
    # @option opts [String] :user_agent Client identifier, takes precedence over headers
    # @option opts [String] :x_user_agent Client identifier, takes precedence over User-Agent
    # @return [Array<Contact>]
    def get_contacts(character_id, opts = {})
      data, _status_code, _headers = get_contacts_with_http_info(character_id, opts)
      return data
    end

    # Get contacts
    # Return contacts of a character  ---  Alternate route: &#x60;/v1/characters/{character_id}/contacts/&#x60;  Alternate route: &#x60;/legacy/characters/{character_id}/contacts/&#x60;  Alternate route: &#x60;/latest/characters/{character_id}/contacts/&#x60;   ---  This route is cached for up to 300 seconds
    # @param character_id ID for a character
    # @param [Hash] opts the optional parameters
    # @option opts [String] :datasource The server name you would like data from
    # @option opts [Integer] :page page integer
    # @option opts [String] :token Access token to use, if preferred over a header
    # @option opts [String] :user_agent Client identifier, takes precedence over headers
    # @option opts [String] :x_user_agent Client identifier, takes precedence over User-Agent
    # @return [Array<(Array<Contact>, Fixnum, Hash)>] Array<Contact> data, response status code and response headers
    def get_contacts_with_http_info(character_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: ContactsApi.get_contacts ..."
      end
      # verify the required parameter 'character_id' is set
      fail ArgumentError, "Missing the required parameter 'character_id' when calling ContactsApi.get_contacts" if character_id.nil?
      if opts[:'datasource'] && !['tranquility', 'singularity'].include?(opts[:'datasource'])
        fail ArgumentError, 'invalid value for "datasource", must be one of tranquility, singularity'
      end
      if !opts[:'page'].nil? && opts[:'page'] < 1
        fail ArgumentError, 'invalid value for "opts[:"page"]" when calling ContactsApi.get_contacts, must be greater than or equal to 1.'
      end

      # resource path
      local_var_path = "/characters/{character_id}/contacts/".sub('{format}','json').sub('{' + 'character_id' + '}', character_id.to_s)

      # query parameters
      query_params = {}
      query_params[:'datasource'] = opts[:'datasource'] if !opts[:'datasource'].nil?
      query_params[:'page'] = opts[:'page'] if !opts[:'page'].nil?
      query_params[:'token'] = opts[:'token'] if !opts[:'token'].nil?
      query_params[:'user_agent'] = opts[:'user_agent'] if !opts[:'user_agent'].nil?

      # header parameters
      header_params = {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
      header_params[:'X-User-Agent'] = opts[:'x_user_agent'] if !opts[:'x_user_agent'].nil?

      # form parameters
      form_params = {}

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

    # Get contact labels
    # Return custom labels for contacts the character defined  ---  Alternate route: `/v1/characters/{character_id}/contacts/labels/`  Alternate route: `/legacy/characters/{character_id}/contacts/labels/`  Alternate route: `/latest/characters/{character_id}/contacts/labels/`   ---  This route is cached for up to 300 seconds
    # @param character_id ID for a character
    # @param [Hash] opts the optional parameters
    # @option opts [String] :datasource The server name you would like data from (default to tranquility)
    # @option opts [String] :token Access token to use, if preferred over a header
    # @option opts [String] :user_agent Client identifier, takes precedence over headers
    # @option opts [String] :x_user_agent Client identifier, takes precedence over User-Agent
    # @return [Array<ContactLabel>]
    def get_contacts_labels(character_id, opts = {})
      data, _status_code, _headers = get_contacts_labels_with_http_info(character_id, opts)
      return data
    end

    # Get contact labels
    # Return custom labels for contacts the character defined  ---  Alternate route: &#x60;/v1/characters/{character_id}/contacts/labels/&#x60;  Alternate route: &#x60;/legacy/characters/{character_id}/contacts/labels/&#x60;  Alternate route: &#x60;/latest/characters/{character_id}/contacts/labels/&#x60;   ---  This route is cached for up to 300 seconds
    # @param character_id ID for a character
    # @param [Hash] opts the optional parameters
    # @option opts [String] :datasource The server name you would like data from
    # @option opts [String] :token Access token to use, if preferred over a header
    # @option opts [String] :user_agent Client identifier, takes precedence over headers
    # @option opts [String] :x_user_agent Client identifier, takes precedence over User-Agent
    # @return [Array<(Array<ContactLabel>, Fixnum, Hash)>] Array<ContactLabel> data, response status code and response headers
    def get_contacts_labels_with_http_info(character_id, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: ContactsApi.get_contacts_labels ..."
      end
      # verify the required parameter 'character_id' is set
      fail ArgumentError, "Missing the required parameter 'character_id' when calling ContactsApi.get_contacts_labels" if character_id.nil?
      if opts[:'datasource'] && !['tranquility', 'singularity'].include?(opts[:'datasource'])
        fail ArgumentError, 'invalid value for "datasource", must be one of tranquility, singularity'
      end
      # resource path
      local_var_path = "/characters/{character_id}/contacts/labels/".sub('{format}','json').sub('{' + 'character_id' + '}', character_id.to_s)

      # query parameters
      query_params = {}
      query_params[:'datasource'] = opts[:'datasource'] if !opts[:'datasource'].nil?
      query_params[:'token'] = opts[:'token'] if !opts[:'token'].nil?
      query_params[:'user_agent'] = opts[:'user_agent'] if !opts[:'user_agent'].nil?

      # header parameters
      header_params = {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
      header_params[:'X-User-Agent'] = opts[:'x_user_agent'] if !opts[:'x_user_agent'].nil?

      # form parameters
      form_params = {}

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

    # Add contacts
    # Bulk add contacts with same settings  ---  Alternate route: `/v1/characters/{character_id}/contacts/`  Alternate route: `/legacy/characters/{character_id}/contacts/`  Alternate route: `/latest/characters/{character_id}/contacts/` 
    # @param character_id ID for a character
    # @param contact_ids A list of contacts to add
    # @param standing Standing for the new contact
    # @param [Hash] opts the optional parameters
    # @option opts [String] :datasource The server name you would like data from (default to tranquility)
    # @option opts [Integer] :label_id Add a custom label to the new contact (default to 0)
    # @option opts [String] :token Access token to use, if preferred over a header
    # @option opts [String] :user_agent Client identifier, takes precedence over headers
    # @option opts [BOOLEAN] :watched Whether the new contact should be watched, note this is only effective on characters (default to false)
    # @option opts [String] :x_user_agent Client identifier, takes precedence over User-Agent
    # @return [Array<Integer>]
    def add_contacts(character_id, contact_ids, standing, opts = {})
      data, _status_code, _headers = add_contacts_with_http_info(character_id, contact_ids, standing, opts)
      return data
    end

    # Add contacts
    # Bulk add contacts with same settings  ---  Alternate route: &#x60;/v1/characters/{character_id}/contacts/&#x60;  Alternate route: &#x60;/legacy/characters/{character_id}/contacts/&#x60;  Alternate route: &#x60;/latest/characters/{character_id}/contacts/&#x60; 
    # @param character_id ID for a character
    # @param contact_ids A list of contacts to add
    # @param standing Standing for the new contact
    # @param [Hash] opts the optional parameters
    # @option opts [String] :datasource The server name you would like data from
    # @option opts [Integer] :label_id Add a custom label to the new contact
    # @option opts [String] :token Access token to use, if preferred over a header
    # @option opts [String] :user_agent Client identifier, takes precedence over headers
    # @option opts [BOOLEAN] :watched Whether the new contact should be watched, note this is only effective on characters
    # @option opts [String] :x_user_agent Client identifier, takes precedence over User-Agent
    # @return [Array<(Array<Integer>, Fixnum, Hash)>] Array<Integer> data, response status code and response headers
    def add_contacts_with_http_info(character_id, contact_ids, standing, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: ContactsApi.add_contacts ..."
      end
      # verify the required parameter 'character_id' is set
      fail ArgumentError, "Missing the required parameter 'character_id' when calling ContactsApi.add_contacts" if character_id.nil?
      # verify the required parameter 'contact_ids' is set
      fail ArgumentError, "Missing the required parameter 'contact_ids' when calling ContactsApi.add_contacts" if contact_ids.nil?
      # verify the required parameter 'standing' is set
      fail ArgumentError, "Missing the required parameter 'standing' when calling ContactsApi.add_contacts" if standing.nil?
      if standing > 10
        fail ArgumentError, 'invalid value for "standing" when calling ContactsApi.add_contacts, must be smaller than or equal to 10.'
      end

      if standing < -10
        fail ArgumentError, 'invalid value for "standing" when calling ContactsApi.add_contacts, must be greater than or equal to -10.'
      end

      if opts[:'datasource'] && !['tranquility', 'singularity'].include?(opts[:'datasource'])
        fail ArgumentError, 'invalid value for "datasource", must be one of tranquility, singularity'
      end
      # resource path
      local_var_path = "/characters/{character_id}/contacts/".sub('{format}','json').sub('{' + 'character_id' + '}', character_id.to_s)

      # query parameters
      query_params = {}
      query_params[:'standing'] = standing
      query_params[:'datasource'] = opts[:'datasource'] if !opts[:'datasource'].nil?
      query_params[:'label_id'] = opts[:'label_id'] if !opts[:'label_id'].nil?
      query_params[:'token'] = opts[:'token'] if !opts[:'token'].nil?
      query_params[:'user_agent'] = opts[:'user_agent'] if !opts[:'user_agent'].nil?
      query_params[:'watched'] = opts[:'watched'] if !opts[:'watched'].nil?

      # header parameters
      header_params = {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
      header_params[:'X-User-Agent'] = opts[:'x_user_agent'] if !opts[:'x_user_agent'].nil?

      # form parameters
      form_params = {}

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

    # Edit contacts
    # Bulk edit contacts with same settings  ---  Alternate route: `/v1/characters/{character_id}/contacts/`  Alternate route: `/legacy/characters/{character_id}/contacts/`  Alternate route: `/latest/characters/{character_id}/contacts/` 
    # @param character_id ID for a character
    # @param contact_ids A list of contacts to edit
    # @param standing Standing for the contact
    # @param [Hash] opts the optional parameters
    # @option opts [String] :datasource The server name you would like data from (default to tranquility)
    # @option opts [Integer] :label_id Add a custom label to the contact, use 0 for clearing label (default to 0)
    # @option opts [String] :token Access token to use, if preferred over a header
    # @option opts [String] :user_agent Client identifier, takes precedence over headers
    # @option opts [BOOLEAN] :watched Whether the contact should be watched, note this is only effective on characters (default to false)
    # @option opts [String] :x_user_agent Client identifier, takes precedence over User-Agent
    # @return [nil]
    def edit_contacts(character_id, contact_ids, standing, opts = {})
      edit_contacts_with_http_info(character_id, contact_ids, standing, opts)
      return nil
    end

    # Edit contacts
    # Bulk edit contacts with same settings  ---  Alternate route: &#x60;/v1/characters/{character_id}/contacts/&#x60;  Alternate route: &#x60;/legacy/characters/{character_id}/contacts/&#x60;  Alternate route: &#x60;/latest/characters/{character_id}/contacts/&#x60; 
    # @param character_id ID for a character
    # @param contact_ids A list of contacts to edit
    # @param standing Standing for the contact
    # @param [Hash] opts the optional parameters
    # @option opts [String] :datasource The server name you would like data from
    # @option opts [Integer] :label_id Add a custom label to the contact, use 0 for clearing label
    # @option opts [String] :token Access token to use, if preferred over a header
    # @option opts [String] :user_agent Client identifier, takes precedence over headers
    # @option opts [BOOLEAN] :watched Whether the contact should be watched, note this is only effective on characters
    # @option opts [String] :x_user_agent Client identifier, takes precedence over User-Agent
    # @return [Array<(nil, Fixnum, Hash)>] nil, response status code and response headers
    def edit_contacts_with_http_info(character_id, contact_ids, standing, opts = {})
      if @api_client.config.debugging
        @api_client.config.logger.debug "Calling API: ContactsApi.edit_contacts ..."
      end
      # verify the required parameter 'character_id' is set
      fail ArgumentError, "Missing the required parameter 'character_id' when calling ContactsApi.edit_contacts" if character_id.nil?
      # verify the required parameter 'contact_ids' is set
      fail ArgumentError, "Missing the required parameter 'contact_ids' when calling ContactsApi.edit_contacts" if contact_ids.nil?
      # verify the required parameter 'standing' is set
      fail ArgumentError, "Missing the required parameter 'standing' when calling ContactsApi.edit_contacts" if standing.nil?
      if standing > 10
        fail ArgumentError, 'invalid value for "standing" when calling ContactsApi.edit_contacts, must be smaller than or equal to 10.'
      end

      if standing < -10
        fail ArgumentError, 'invalid value for "standing" when calling ContactsApi.edit_contacts, must be greater than or equal to -10.'
      end

      if opts[:'datasource'] && !['tranquility', 'singularity'].include?(opts[:'datasource'])
        fail ArgumentError, 'invalid value for "datasource", must be one of tranquility, singularity'
      end
      # resource path
      local_var_path = "/characters/{character_id}/contacts/".sub('{format}','json').sub('{' + 'character_id' + '}', character_id.to_s)

      # query parameters
      query_params = {}
      query_params[:'standing'] = standing
      query_params[:'datasource'] = opts[:'datasource'] if !opts[:'datasource'].nil?
      query_params[:'label_id'] = opts[:'label_id'] if !opts[:'label_id'].nil?
      query_params[:'token'] = opts[:'token'] if !opts[:'token'].nil?
      query_params[:'user_agent'] = opts[:'user_agent'] if !opts[:'user_agent'].nil?
      query_params[:'watched'] = opts[:'watched'] if !opts[:'watched'].nil?

      # header parameters
      header_params = {}
      # HTTP header 'Accept' (if needed)
      header_params['Accept'] = @api_client.select_header_accept(['application/json'])
      header_params[:'X-User-Agent'] = opts[:'x_user_agent'] if !opts[:'x_user_agent'].nil?

      # form parameters
      form_params = {}

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