# coding: utf-8

"""
    jobsync-api

    Job Sync enables the user to manage jobs (view, create, update and delete jobs) in the Phenom database directly from the ATS, with the updates reflected on the career site.  # noqa: E501

    OpenAPI spec version: 1.0.0
    Contact: shravan.malla@phenompeople.com
    Generated by: phenom
"""

import pprint
import re  # noqa: F401

import six

class JobResponseDTO(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 = {
        'apply_url': 'str',
        'category': 'str',
        'company_name': 'str',
        'description': 'str',
        'job_id': 'str',
        'locale': 'str',
        'req_id': 'str',
        'site_type': 'str',
        'title': 'str',
        'employment_type': 'str',
        'city': 'str',
        'state': 'str',
        'country': 'str',
        'address': 'str',
        'postal_code': 'str',
        'hiring_manager_email': 'str',
        'hiring_manager_name': 'str',
        'recruiter_email': 'str',
        'recruiter_name': 'str',
        'source': 'str',
        'display_career_site': 'bool',
        'multi_location': 'list[LocationDTO]',
        'multi_category': 'list[Category]',
        'multi_recruiter': 'list[Recruiter]',
        'additional_fields': 'object',
        'visibility_locale': 'list[str]',
        'visibility_site_type': 'list[str]'
    }

    attribute_map = {
        'apply_url': 'applyUrl',
        'category': 'category',
        'company_name': 'companyName',
        'description': 'description',
        'job_id': 'jobId',
        'locale': 'locale',
        'req_id': 'reqId',
        'site_type': 'siteType',
        'title': 'title',
        'employment_type': 'employmentType',
        'city': 'city',
        'state': 'state',
        'country': 'country',
        'address': 'address',
        'postal_code': 'postalCode',
        'hiring_manager_email': 'hiringManagerEmail',
        'hiring_manager_name': 'hiringManagerName',
        'recruiter_email': 'recruiterEmail',
        'recruiter_name': 'recruiterName',
        'source': 'source',
        'display_career_site': 'displayCareerSite',
        'multi_location': 'multiLocation',
        'multi_category': 'multiCategory',
        'multi_recruiter': 'multiRecruiter',
        'additional_fields': 'additionalFields',
        'visibility_locale': 'visibilityLocale',
        'visibility_site_type': 'visibilitySiteType'
    }

    def __init__(self, apply_url=None, category=None, company_name=None, description=None, job_id=None, locale=None, req_id=None, site_type=None, title=None, employment_type=None, city=None, state=None, country=None, address=None, postal_code=None, hiring_manager_email=None, hiring_manager_name=None, recruiter_email=None, recruiter_name=None, source=None, display_career_site=None, multi_location=None, multi_category=None, multi_recruiter=None, additional_fields=None, visibility_locale=None, visibility_site_type=None):  # noqa: E501
        """JobResponseDTO - a model defined in Swagger"""  # noqa: E501
        self._apply_url = None
        self._category = None
        self._company_name = None
        self._description = None
        self._job_id = None
        self._locale = None
        self._req_id = None
        self._site_type = None
        self._title = None
        self._employment_type = None
        self._city = None
        self._state = None
        self._country = None
        self._address = None
        self._postal_code = None
        self._hiring_manager_email = None
        self._hiring_manager_name = None
        self._recruiter_email = None
        self._recruiter_name = None
        self._source = None
        self._display_career_site = None
        self._multi_location = None
        self._multi_category = None
        self._multi_recruiter = None
        self._additional_fields = None
        self._visibility_locale = None
        self._visibility_site_type = None
        self.discriminator = None
        if apply_url is not None:
            self.apply_url = apply_url
        if category is not None:
            self.category = category
        if company_name is not None:
            self.company_name = company_name
        if description is not None:
            self.description = description
        if job_id is not None:
            self.job_id = job_id
        if locale is not None:
            self.locale = locale
        if req_id is not None:
            self.req_id = req_id
        if site_type is not None:
            self.site_type = site_type
        if title is not None:
            self.title = title
        if employment_type is not None:
            self.employment_type = employment_type
        if city is not None:
            self.city = city
        if state is not None:
            self.state = state
        if country is not None:
            self.country = country
        if address is not None:
            self.address = address
        if postal_code is not None:
            self.postal_code = postal_code
        if hiring_manager_email is not None:
            self.hiring_manager_email = hiring_manager_email
        if hiring_manager_name is not None:
            self.hiring_manager_name = hiring_manager_name
        if recruiter_email is not None:
            self.recruiter_email = recruiter_email
        if recruiter_name is not None:
            self.recruiter_name = recruiter_name
        if source is not None:
            self.source = source
        if display_career_site is not None:
            self.display_career_site = display_career_site
        if multi_location is not None:
            self.multi_location = multi_location
        if multi_category is not None:
            self.multi_category = multi_category
        if multi_recruiter is not None:
            self.multi_recruiter = multi_recruiter
        if additional_fields is not None:
            self.additional_fields = additional_fields
        if visibility_locale is not None:
            self.visibility_locale = visibility_locale
        if visibility_site_type is not None:
            self.visibility_site_type = visibility_site_type

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

        Apply url of the job.  # noqa: E501

        :return: The apply_url of this JobResponseDTO.  # noqa: E501
        :rtype: str
        """
        return self._apply_url

    @apply_url.setter
    def apply_url(self, apply_url):
        """Sets the apply_url of this JobResponseDTO.

        Apply url of the job.  # noqa: E501

        :param apply_url: The apply_url of this JobResponseDTO.  # noqa: E501
        :type: str
        """

        self._apply_url = apply_url

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

        Phenom job category.  # noqa: E501

        :return: The category of this JobResponseDTO.  # noqa: E501
        :rtype: str
        """
        return self._category

    @category.setter
    def category(self, category):
        """Sets the category of this JobResponseDTO.

        Phenom job category.  # noqa: E501

        :param category: The category of this JobResponseDTO.  # noqa: E501
        :type: str
        """

        self._category = category

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

        Tenant name.  # noqa: E501

        :return: The company_name of this JobResponseDTO.  # noqa: E501
        :rtype: str
        """
        return self._company_name

    @company_name.setter
    def company_name(self, company_name):
        """Sets the company_name of this JobResponseDTO.

        Tenant name.  # noqa: E501

        :param company_name: The company_name of this JobResponseDTO.  # noqa: E501
        :type: str
        """

        self._company_name = company_name

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

        ATS job description.  # noqa: E501

        :return: The description of this JobResponseDTO.  # noqa: E501
        :rtype: str
        """
        return self._description

    @description.setter
    def description(self, description):
        """Sets the description of this JobResponseDTO.

        ATS job description.  # noqa: E501

        :param description: The description of this JobResponseDTO.  # noqa: E501
        :type: str
        """

        self._description = description

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

        ATS jobId.  # noqa: E501

        :return: The job_id of this JobResponseDTO.  # noqa: E501
        :rtype: str
        """
        return self._job_id

    @job_id.setter
    def job_id(self, job_id):
        """Sets the job_id of this JobResponseDTO.

        ATS jobId.  # noqa: E501

        :param job_id: The job_id of this JobResponseDTO.  # noqa: E501
        :type: str
        """

        self._job_id = job_id

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

        Locale of the site (Language_Country).  # noqa: E501

        :return: The locale of this JobResponseDTO.  # noqa: E501
        :rtype: str
        """
        return self._locale

    @locale.setter
    def locale(self, locale):
        """Sets the locale of this JobResponseDTO.

        Locale of the site (Language_Country).  # noqa: E501

        :param locale: The locale of this JobResponseDTO.  # noqa: E501
        :type: str
        """

        self._locale = locale

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

        ATS requisition id.  # noqa: E501

        :return: The req_id of this JobResponseDTO.  # noqa: E501
        :rtype: str
        """
        return self._req_id

    @req_id.setter
    def req_id(self, req_id):
        """Sets the req_id of this JobResponseDTO.

        ATS requisition id.  # noqa: E501

        :param req_id: The req_id of this JobResponseDTO.  # noqa: E501
        :type: str
        """

        self._req_id = req_id

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

        Persona that the job belongs to.  # noqa: E501

        :return: The site_type of this JobResponseDTO.  # noqa: E501
        :rtype: str
        """
        return self._site_type

    @site_type.setter
    def site_type(self, site_type):
        """Sets the site_type of this JobResponseDTO.

        Persona that the job belongs to.  # noqa: E501

        :param site_type: The site_type of this JobResponseDTO.  # noqa: E501
        :type: str
        """

        self._site_type = site_type

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

        ATS job title.  # noqa: E501

        :return: The title of this JobResponseDTO.  # noqa: E501
        :rtype: str
        """
        return self._title

    @title.setter
    def title(self, title):
        """Sets the title of this JobResponseDTO.

        ATS job title.  # noqa: E501

        :param title: The title of this JobResponseDTO.  # noqa: E501
        :type: str
        """

        self._title = title

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

        Type that the job belongs to.  # noqa: E501

        :return: The employment_type of this JobResponseDTO.  # noqa: E501
        :rtype: str
        """
        return self._employment_type

    @employment_type.setter
    def employment_type(self, employment_type):
        """Sets the employment_type of this JobResponseDTO.

        Type that the job belongs to.  # noqa: E501

        :param employment_type: The employment_type of this JobResponseDTO.  # noqa: E501
        :type: str
        """

        self._employment_type = employment_type

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

        ATS job posting city name.  # noqa: E501

        :return: The city of this JobResponseDTO.  # noqa: E501
        :rtype: str
        """
        return self._city

    @city.setter
    def city(self, city):
        """Sets the city of this JobResponseDTO.

        ATS job posting city name.  # noqa: E501

        :param city: The city of this JobResponseDTO.  # noqa: E501
        :type: str
        """

        self._city = city

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

        ATS job posting state name.  # noqa: E501

        :return: The state of this JobResponseDTO.  # noqa: E501
        :rtype: str
        """
        return self._state

    @state.setter
    def state(self, state):
        """Sets the state of this JobResponseDTO.

        ATS job posting state name.  # noqa: E501

        :param state: The state of this JobResponseDTO.  # noqa: E501
        :type: str
        """

        self._state = state

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

        ATS job posting country name.  # noqa: E501

        :return: The country of this JobResponseDTO.  # noqa: E501
        :rtype: str
        """
        return self._country

    @country.setter
    def country(self, country):
        """Sets the country of this JobResponseDTO.

        ATS job posting country name.  # noqa: E501

        :param country: The country of this JobResponseDTO.  # noqa: E501
        :type: str
        """

        self._country = country

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

        ATS job posting address.  # noqa: E501

        :return: The address of this JobResponseDTO.  # noqa: E501
        :rtype: str
        """
        return self._address

    @address.setter
    def address(self, address):
        """Sets the address of this JobResponseDTO.

        ATS job posting address.  # noqa: E501

        :param address: The address of this JobResponseDTO.  # noqa: E501
        :type: str
        """

        self._address = address

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

        ATS job posting location zip code.  # noqa: E501

        :return: The postal_code of this JobResponseDTO.  # noqa: E501
        :rtype: str
        """
        return self._postal_code

    @postal_code.setter
    def postal_code(self, postal_code):
        """Sets the postal_code of this JobResponseDTO.

        ATS job posting location zip code.  # noqa: E501

        :param postal_code: The postal_code of this JobResponseDTO.  # noqa: E501
        :type: str
        """

        self._postal_code = postal_code

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

        Email of hiring manager associated to the job.  # noqa: E501

        :return: The hiring_manager_email of this JobResponseDTO.  # noqa: E501
        :rtype: str
        """
        return self._hiring_manager_email

    @hiring_manager_email.setter
    def hiring_manager_email(self, hiring_manager_email):
        """Sets the hiring_manager_email of this JobResponseDTO.

        Email of hiring manager associated to the job.  # noqa: E501

        :param hiring_manager_email: The hiring_manager_email of this JobResponseDTO.  # noqa: E501
        :type: str
        """

        self._hiring_manager_email = hiring_manager_email

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

        Name of hiring manager associated to the job.  # noqa: E501

        :return: The hiring_manager_name of this JobResponseDTO.  # noqa: E501
        :rtype: str
        """
        return self._hiring_manager_name

    @hiring_manager_name.setter
    def hiring_manager_name(self, hiring_manager_name):
        """Sets the hiring_manager_name of this JobResponseDTO.

        Name of hiring manager associated to the job.  # noqa: E501

        :param hiring_manager_name: The hiring_manager_name of this JobResponseDTO.  # noqa: E501
        :type: str
        """

        self._hiring_manager_name = hiring_manager_name

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

        Email of the recruiter assigned to the job.  # noqa: E501

        :return: The recruiter_email of this JobResponseDTO.  # noqa: E501
        :rtype: str
        """
        return self._recruiter_email

    @recruiter_email.setter
    def recruiter_email(self, recruiter_email):
        """Sets the recruiter_email of this JobResponseDTO.

        Email of the recruiter assigned to the job.  # noqa: E501

        :param recruiter_email: The recruiter_email of this JobResponseDTO.  # noqa: E501
        :type: str
        """

        self._recruiter_email = recruiter_email

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

        Name of the recruiter assigned to the job.  # noqa: E501

        :return: The recruiter_name of this JobResponseDTO.  # noqa: E501
        :rtype: str
        """
        return self._recruiter_name

    @recruiter_name.setter
    def recruiter_name(self, recruiter_name):
        """Sets the recruiter_name of this JobResponseDTO.

        Name of the recruiter assigned to the job.  # noqa: E501

        :param recruiter_name: The recruiter_name of this JobResponseDTO.  # noqa: E501
        :type: str
        """

        self._recruiter_name = recruiter_name

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

        Job source.  # noqa: E501

        :return: The source of this JobResponseDTO.  # noqa: E501
        :rtype: str
        """
        return self._source

    @source.setter
    def source(self, source):
        """Sets the source of this JobResponseDTO.

        Job source.  # noqa: E501

        :param source: The source of this JobResponseDTO.  # noqa: E501
        :type: str
        """

        self._source = source

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

        To display the job on career site or not.  # noqa: E501

        :return: The display_career_site of this JobResponseDTO.  # noqa: E501
        :rtype: bool
        """
        return self._display_career_site

    @display_career_site.setter
    def display_career_site(self, display_career_site):
        """Sets the display_career_site of this JobResponseDTO.

        To display the job on career site or not.  # noqa: E501

        :param display_career_site: The display_career_site of this JobResponseDTO.  # noqa: E501
        :type: bool
        """

        self._display_career_site = display_career_site

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

        All job posting locations, includes /excludes primary posting location.  # noqa: E501

        :return: The multi_location of this JobResponseDTO.  # noqa: E501
        :rtype: list[LocationDTO]
        """
        return self._multi_location

    @multi_location.setter
    def multi_location(self, multi_location):
        """Sets the multi_location of this JobResponseDTO.

        All job posting locations, includes /excludes primary posting location.  # noqa: E501

        :param multi_location: The multi_location of this JobResponseDTO.  # noqa: E501
        :type: list[LocationDTO]
        """

        self._multi_location = multi_location

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

        All categories that the job belongs to.  # noqa: E501

        :return: The multi_category of this JobResponseDTO.  # noqa: E501
        :rtype: list[Category]
        """
        return self._multi_category

    @multi_category.setter
    def multi_category(self, multi_category):
        """Sets the multi_category of this JobResponseDTO.

        All categories that the job belongs to.  # noqa: E501

        :param multi_category: The multi_category of this JobResponseDTO.  # noqa: E501
        :type: list[Category]
        """

        self._multi_category = multi_category

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

        Data of recruiters assigned to the job(array).  # noqa: E501

        :return: The multi_recruiter of this JobResponseDTO.  # noqa: E501
        :rtype: list[Recruiter]
        """
        return self._multi_recruiter

    @multi_recruiter.setter
    def multi_recruiter(self, multi_recruiter):
        """Sets the multi_recruiter of this JobResponseDTO.

        Data of recruiters assigned to the job(array).  # noqa: E501

        :param multi_recruiter: The multi_recruiter of this JobResponseDTO.  # noqa: E501
        :type: list[Recruiter]
        """

        self._multi_recruiter = multi_recruiter

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

        Additional fields associated to the job.  # noqa: E501

        :return: The additional_fields of this JobResponseDTO.  # noqa: E501
        :rtype: object
        """
        return self._additional_fields

    @additional_fields.setter
    def additional_fields(self, additional_fields):
        """Sets the additional_fields of this JobResponseDTO.

        Additional fields associated to the job.  # noqa: E501

        :param additional_fields: The additional_fields of this JobResponseDTO.  # noqa: E501
        :type: object
        """

        self._additional_fields = additional_fields

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

        All locales that the job belongs to.  # noqa: E501

        :return: The visibility_locale of this JobResponseDTO.  # noqa: E501
        :rtype: list[str]
        """
        return self._visibility_locale

    @visibility_locale.setter
    def visibility_locale(self, visibility_locale):
        """Sets the visibility_locale of this JobResponseDTO.

        All locales that the job belongs to.  # noqa: E501

        :param visibility_locale: The visibility_locale of this JobResponseDTO.  # noqa: E501
        :type: list[str]
        """

        self._visibility_locale = visibility_locale

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

        All personas that the jobs belongs to.  # noqa: E501

        :return: The visibility_site_type of this JobResponseDTO.  # noqa: E501
        :rtype: list[str]
        """
        return self._visibility_site_type

    @visibility_site_type.setter
    def visibility_site_type(self, visibility_site_type):
        """Sets the visibility_site_type of this JobResponseDTO.

        All personas that the jobs belongs to.  # noqa: E501

        :param visibility_site_type: The visibility_site_type of this JobResponseDTO.  # noqa: E501
        :type: list[str]
        """

        self._visibility_site_type = visibility_site_type

    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(JobResponseDTO, 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, JobResponseDTO):
            return False

        return self.__dict__ == other.__dict__

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