# coding: utf-8

"""
    candidates-api

    The Candidate APIs allows you to add, update and delete candidates.  # noqa: E501

    OpenAPI spec version: 1.0.0
    
    Generated by: phenom
"""

import pprint
import re  # noqa: F401

import six

class UpdateCandidateRequest(object):
    """
    Attributes:
      swagger_types (dict): The key is attribute name
                            and the value is attribute type.
      attribute_map (dict): The key is attribute name
                            and the value is json key in definition.
    """
    swagger_types = {
        'first_name': 'str',
        'last_name': 'str',
        'middle_name': 'str',
        'email_list': 'list[UpdateCandidateRequestEmailList]',
        'contacts': 'list[UpdateCandidateRequestContacts]',
        'linked_in_profile_url': 'str',
        'ats_id': 'str',
        'employee_id': 'str',
        'internal': 'bool',
        'profile_sources': 'list[str]',
        'created_date': 'str',
        'updated_date': 'str',
        'language_preference': 'str',
        'language_known': 'list[str]',
        'gender': 'str',
        'designation': 'str',
        'race': 'str',
        'veteran': 'str',
        'disability': 'str',
        'ethnicity': 'str'
    }

    attribute_map = {
        'first_name': 'firstName',
        'last_name': 'lastName',
        'middle_name': 'middleName',
        'email_list': 'emailList',
        'contacts': 'contacts',
        'linked_in_profile_url': 'linkedInProfileURL',
        'ats_id': 'atsId',
        'employee_id': 'employeeId',
        'internal': 'internal',
        'profile_sources': 'profileSources',
        'created_date': 'createdDate',
        'updated_date': 'updatedDate',
        'language_preference': 'languagePreference',
        'language_known': 'languageKnown',
        'gender': 'gender',
        'designation': 'designation',
        'race': 'race',
        'veteran': 'veteran',
        'disability': 'disability',
        'ethnicity': 'ethnicity'
    }

    def __init__(self, first_name=None, last_name=None, middle_name=None, email_list=None, contacts=None, linked_in_profile_url=None, ats_id=None, employee_id=None, internal=None, profile_sources=None, created_date=None, updated_date=None, language_preference=None, language_known=None, gender=None, designation=None, race=None, veteran=None, disability=None, ethnicity=None):  # noqa: E501
        """UpdateCandidateRequest - a model defined in Swagger"""  # noqa: E501
        self._first_name = None
        self._last_name = None
        self._middle_name = None
        self._email_list = None
        self._contacts = None
        self._linked_in_profile_url = None
        self._ats_id = None
        self._employee_id = None
        self._internal = None
        self._profile_sources = None
        self._created_date = None
        self._updated_date = None
        self._language_preference = None
        self._language_known = None
        self._gender = None
        self._designation = None
        self._race = None
        self._veteran = None
        self._disability = None
        self._ethnicity = None
        self.discriminator = None
        if first_name is not None:
            self.first_name = first_name
        if last_name is not None:
            self.last_name = last_name
        if middle_name is not None:
            self.middle_name = middle_name
        if email_list is not None:
            self.email_list = email_list
        if contacts is not None:
            self.contacts = contacts
        if linked_in_profile_url is not None:
            self.linked_in_profile_url = linked_in_profile_url
        if ats_id is not None:
            self.ats_id = ats_id
        if employee_id is not None:
            self.employee_id = employee_id
        if internal is not None:
            self.internal = internal
        if profile_sources is not None:
            self.profile_sources = profile_sources
        if created_date is not None:
            self.created_date = created_date
        if updated_date is not None:
            self.updated_date = updated_date
        if language_preference is not None:
            self.language_preference = language_preference
        if language_known is not None:
            self.language_known = language_known
        if gender is not None:
            self.gender = gender
        if designation is not None:
            self.designation = designation
        if race is not None:
            self.race = race
        if veteran is not None:
            self.veteran = veteran
        if disability is not None:
            self.disability = disability
        if ethnicity is not None:
            self.ethnicity = ethnicity

    @property
    def first_name(self):
        """Gets the first_name of this UpdateCandidateRequest.  # noqa: E501

        The first name of the candidate.  # noqa: E501

        :return: The first_name of this UpdateCandidateRequest.  # noqa: E501
        :rtype: str
        """
        return self._first_name

    @first_name.setter
    def first_name(self, first_name):
        """Sets the first_name of this UpdateCandidateRequest.

        The first name of the candidate.  # noqa: E501

        :param first_name: The first_name of this UpdateCandidateRequest.  # noqa: E501
        :type: str
        """

        self._first_name = first_name

    @property
    def last_name(self):
        """Gets the last_name of this UpdateCandidateRequest.  # noqa: E501

        The last name of the candidate.  # noqa: E501

        :return: The last_name of this UpdateCandidateRequest.  # noqa: E501
        :rtype: str
        """
        return self._last_name

    @last_name.setter
    def last_name(self, last_name):
        """Sets the last_name of this UpdateCandidateRequest.

        The last name of the candidate.  # noqa: E501

        :param last_name: The last_name of this UpdateCandidateRequest.  # noqa: E501
        :type: str
        """

        self._last_name = last_name

    @property
    def middle_name(self):
        """Gets the middle_name of this UpdateCandidateRequest.  # noqa: E501

        The middle name of the candidate.  # noqa: E501

        :return: The middle_name of this UpdateCandidateRequest.  # noqa: E501
        :rtype: str
        """
        return self._middle_name

    @middle_name.setter
    def middle_name(self, middle_name):
        """Sets the middle_name of this UpdateCandidateRequest.

        The middle name of the candidate.  # noqa: E501

        :param middle_name: The middle_name of this UpdateCandidateRequest.  # noqa: E501
        :type: str
        """

        self._middle_name = middle_name

    @property
    def email_list(self):
        """Gets the email_list of this UpdateCandidateRequest.  # noqa: E501

        Array of email addresses associated with the candidate.  # noqa: E501

        :return: The email_list of this UpdateCandidateRequest.  # noqa: E501
        :rtype: list[UpdateCandidateRequestEmailList]
        """
        return self._email_list

    @email_list.setter
    def email_list(self, email_list):
        """Sets the email_list of this UpdateCandidateRequest.

        Array of email addresses associated with the candidate.  # noqa: E501

        :param email_list: The email_list of this UpdateCandidateRequest.  # noqa: E501
        :type: list[UpdateCandidateRequestEmailList]
        """

        self._email_list = email_list

    @property
    def contacts(self):
        """Gets the contacts of this UpdateCandidateRequest.  # noqa: E501

        Array of contact details associated with the candidate.  # noqa: E501

        :return: The contacts of this UpdateCandidateRequest.  # noqa: E501
        :rtype: list[UpdateCandidateRequestContacts]
        """
        return self._contacts

    @contacts.setter
    def contacts(self, contacts):
        """Sets the contacts of this UpdateCandidateRequest.

        Array of contact details associated with the candidate.  # noqa: E501

        :param contacts: The contacts of this UpdateCandidateRequest.  # noqa: E501
        :type: list[UpdateCandidateRequestContacts]
        """

        self._contacts = contacts

    @property
    def linked_in_profile_url(self):
        """Gets the linked_in_profile_url of this UpdateCandidateRequest.  # noqa: E501

        The LinkedIn profile URL of the candidate.  # noqa: E501

        :return: The linked_in_profile_url of this UpdateCandidateRequest.  # noqa: E501
        :rtype: str
        """
        return self._linked_in_profile_url

    @linked_in_profile_url.setter
    def linked_in_profile_url(self, linked_in_profile_url):
        """Sets the linked_in_profile_url of this UpdateCandidateRequest.

        The LinkedIn profile URL of the candidate.  # noqa: E501

        :param linked_in_profile_url: The linked_in_profile_url of this UpdateCandidateRequest.  # noqa: E501
        :type: str
        """

        self._linked_in_profile_url = linked_in_profile_url

    @property
    def ats_id(self):
        """Gets the ats_id of this UpdateCandidateRequest.  # noqa: E501

        The ATS (Applicant Tracking System) identifier associated with the candidate.  # noqa: E501

        :return: The ats_id of this UpdateCandidateRequest.  # noqa: E501
        :rtype: str
        """
        return self._ats_id

    @ats_id.setter
    def ats_id(self, ats_id):
        """Sets the ats_id of this UpdateCandidateRequest.

        The ATS (Applicant Tracking System) identifier associated with the candidate.  # noqa: E501

        :param ats_id: The ats_id of this UpdateCandidateRequest.  # noqa: E501
        :type: str
        """

        self._ats_id = ats_id

    @property
    def employee_id(self):
        """Gets the employee_id of this UpdateCandidateRequest.  # noqa: E501

        The employee identifier associated with the candidate.  # noqa: E501

        :return: The employee_id of this UpdateCandidateRequest.  # noqa: E501
        :rtype: str
        """
        return self._employee_id

    @employee_id.setter
    def employee_id(self, employee_id):
        """Sets the employee_id of this UpdateCandidateRequest.

        The employee identifier associated with the candidate.  # noqa: E501

        :param employee_id: The employee_id of this UpdateCandidateRequest.  # noqa: E501
        :type: str
        """

        self._employee_id = employee_id

    @property
    def internal(self):
        """Gets the internal of this UpdateCandidateRequest.  # noqa: E501

        Indicates whether the candidate is internal.  # noqa: E501

        :return: The internal of this UpdateCandidateRequest.  # noqa: E501
        :rtype: bool
        """
        return self._internal

    @internal.setter
    def internal(self, internal):
        """Sets the internal of this UpdateCandidateRequest.

        Indicates whether the candidate is internal.  # noqa: E501

        :param internal: The internal of this UpdateCandidateRequest.  # noqa: E501
        :type: bool
        """

        self._internal = internal

    @property
    def profile_sources(self):
        """Gets the profile_sources of this UpdateCandidateRequest.  # noqa: E501

        Array of profile sources associated with the candidate.  # noqa: E501

        :return: The profile_sources of this UpdateCandidateRequest.  # noqa: E501
        :rtype: list[str]
        """
        return self._profile_sources

    @profile_sources.setter
    def profile_sources(self, profile_sources):
        """Sets the profile_sources of this UpdateCandidateRequest.

        Array of profile sources associated with the candidate.  # noqa: E501

        :param profile_sources: The profile_sources of this UpdateCandidateRequest.  # noqa: E501
        :type: list[str]
        """

        self._profile_sources = profile_sources

    @property
    def created_date(self):
        """Gets the created_date of this UpdateCandidateRequest.  # noqa: E501

        The date and time when the candidate was created in the ATS.  # noqa: E501

        :return: The created_date of this UpdateCandidateRequest.  # noqa: E501
        :rtype: str
        """
        return self._created_date

    @created_date.setter
    def created_date(self, created_date):
        """Sets the created_date of this UpdateCandidateRequest.

        The date and time when the candidate was created in the ATS.  # noqa: E501

        :param created_date: The created_date of this UpdateCandidateRequest.  # noqa: E501
        :type: str
        """

        self._created_date = created_date

    @property
    def updated_date(self):
        """Gets the updated_date of this UpdateCandidateRequest.  # noqa: E501

        The date and time when the candidate record was last updated in the ATS.  # noqa: E501

        :return: The updated_date of this UpdateCandidateRequest.  # noqa: E501
        :rtype: str
        """
        return self._updated_date

    @updated_date.setter
    def updated_date(self, updated_date):
        """Sets the updated_date of this UpdateCandidateRequest.

        The date and time when the candidate record was last updated in the ATS.  # noqa: E501

        :param updated_date: The updated_date of this UpdateCandidateRequest.  # noqa: E501
        :type: str
        """

        self._updated_date = updated_date

    @property
    def language_preference(self):
        """Gets the language_preference of this UpdateCandidateRequest.  # noqa: E501

        The language preference of the candidate.  # noqa: E501

        :return: The language_preference of this UpdateCandidateRequest.  # noqa: E501
        :rtype: str
        """
        return self._language_preference

    @language_preference.setter
    def language_preference(self, language_preference):
        """Sets the language_preference of this UpdateCandidateRequest.

        The language preference of the candidate.  # noqa: E501

        :param language_preference: The language_preference of this UpdateCandidateRequest.  # noqa: E501
        :type: str
        """

        self._language_preference = language_preference

    @property
    def language_known(self):
        """Gets the language_known of this UpdateCandidateRequest.  # noqa: E501

        Array of languages known by the candidate.  # noqa: E501

        :return: The language_known of this UpdateCandidateRequest.  # noqa: E501
        :rtype: list[str]
        """
        return self._language_known

    @language_known.setter
    def language_known(self, language_known):
        """Sets the language_known of this UpdateCandidateRequest.

        Array of languages known by the candidate.  # noqa: E501

        :param language_known: The language_known of this UpdateCandidateRequest.  # noqa: E501
        :type: list[str]
        """

        self._language_known = language_known

    @property
    def gender(self):
        """Gets the gender of this UpdateCandidateRequest.  # noqa: E501

        The gender of the candidate.  # noqa: E501

        :return: The gender of this UpdateCandidateRequest.  # noqa: E501
        :rtype: str
        """
        return self._gender

    @gender.setter
    def gender(self, gender):
        """Sets the gender of this UpdateCandidateRequest.

        The gender of the candidate.  # noqa: E501

        :param gender: The gender of this UpdateCandidateRequest.  # noqa: E501
        :type: str
        """

        self._gender = gender

    @property
    def designation(self):
        """Gets the designation of this UpdateCandidateRequest.  # noqa: E501

        The designation or job title of the candidate.  # noqa: E501

        :return: The designation of this UpdateCandidateRequest.  # noqa: E501
        :rtype: str
        """
        return self._designation

    @designation.setter
    def designation(self, designation):
        """Sets the designation of this UpdateCandidateRequest.

        The designation or job title of the candidate.  # noqa: E501

        :param designation: The designation of this UpdateCandidateRequest.  # noqa: E501
        :type: str
        """

        self._designation = designation

    @property
    def race(self):
        """Gets the race of this UpdateCandidateRequest.  # noqa: E501

        The race or ethnicity of the candidate.  # noqa: E501

        :return: The race of this UpdateCandidateRequest.  # noqa: E501
        :rtype: str
        """
        return self._race

    @race.setter
    def race(self, race):
        """Sets the race of this UpdateCandidateRequest.

        The race or ethnicity of the candidate.  # noqa: E501

        :param race: The race of this UpdateCandidateRequest.  # noqa: E501
        :type: str
        """

        self._race = race

    @property
    def veteran(self):
        """Gets the veteran of this UpdateCandidateRequest.  # noqa: E501

        Indicates whether the candidate is a veteran.  # noqa: E501

        :return: The veteran of this UpdateCandidateRequest.  # noqa: E501
        :rtype: str
        """
        return self._veteran

    @veteran.setter
    def veteran(self, veteran):
        """Sets the veteran of this UpdateCandidateRequest.

        Indicates whether the candidate is a veteran.  # noqa: E501

        :param veteran: The veteran of this UpdateCandidateRequest.  # noqa: E501
        :type: str
        """

        self._veteran = veteran

    @property
    def disability(self):
        """Gets the disability of this UpdateCandidateRequest.  # noqa: E501

        The disability status of the candidate.  # noqa: E501

        :return: The disability of this UpdateCandidateRequest.  # noqa: E501
        :rtype: str
        """
        return self._disability

    @disability.setter
    def disability(self, disability):
        """Sets the disability of this UpdateCandidateRequest.

        The disability status of the candidate.  # noqa: E501

        :param disability: The disability of this UpdateCandidateRequest.  # noqa: E501
        :type: str
        """

        self._disability = disability

    @property
    def ethnicity(self):
        """Gets the ethnicity of this UpdateCandidateRequest.  # noqa: E501

        The ethnicity of the candidate.  # noqa: E501

        :return: The ethnicity of this UpdateCandidateRequest.  # noqa: E501
        :rtype: str
        """
        return self._ethnicity

    @ethnicity.setter
    def ethnicity(self, ethnicity):
        """Sets the ethnicity of this UpdateCandidateRequest.

        The ethnicity of the candidate.  # noqa: E501

        :param ethnicity: The ethnicity of this UpdateCandidateRequest.  # noqa: E501
        :type: str
        """

        self._ethnicity = ethnicity

    def to_dict(self):
        """Returns the model properties as a dict"""
        result = {}

        for attr, _ in six.iteritems(self.swagger_types):
            value = getattr(self, attr)
            if isinstance(value, list):
                result[attr] = list(map(
                    lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
                    value
                ))
            elif hasattr(value, "to_dict"):
                result[attr] = value.to_dict()
            elif isinstance(value, dict):
                result[attr] = dict(map(
                    lambda item: (item[0], item[1].to_dict())
                    if hasattr(item[1], "to_dict") else item,
                    value.items()
                ))
            else:
                result[attr] = value
        if issubclass(UpdateCandidateRequest, dict):
            for key, value in self.items():
                result[key] = value

        return result

    def to_str(self):
        """Returns the string representation of the model"""
        return pprint.pformat(self.to_dict())

    def __repr__(self):
        """For `print` and `pprint`"""
        return self.to_str()

    def __eq__(self, other):
        """Returns true if both objects are equal"""
        if not isinstance(other, UpdateCandidateRequest):
            return False

        return self.__dict__ == other.__dict__

    def __ne__(self, other):
        """Returns true if both objects are not equal"""
        return not self == other
