# coding: utf-8

from __future__ import absolute_import
from datetime import date, datetime  # noqa: F401

from typing import List, Dict  # noqa: F401

from jobbing.models.base_model_ import Model
from jobbing.models.address import Address  # noqa: F401,E501
from jobbing import util


class UserProfile(Model):
    """NOTE: This class is auto generated by the swagger code generator program.

    Do not edit the class manually.
    """
    def __init__(self, userprofile_id: int=None, first_name: str=None, second_name: str=None, first_surname: str=None, second_surname: str=None, birthdate: date=None, curp: str=None, mobile_number: str=None, home_number: str=None, office_number: str=None, facebook_profile: str=None, linkedin_profile: str=None, twitter_profile: str=None, image_profile: str=None, status: int=None, created: date=None, updated: date=None, credentials_id: int=None, org_id: int=None, address: Address=None):  # noqa: E501
        """UserProfile - a model defined in Swagger

        :param userprofile_id: The userprofile_id of this UserProfile.  # noqa: E501
        :type userprofile_id: int
        :param first_name: The first_name of this UserProfile.  # noqa: E501
        :type first_name: str
        :param second_name: The second_name of this UserProfile.  # noqa: E501
        :type second_name: str
        :param first_surname: The first_surname of this UserProfile.  # noqa: E501
        :type first_surname: str
        :param second_surname: The second_surname of this UserProfile.  # noqa: E501
        :type second_surname: str
        :param birthdate: The birthdate of this UserProfile.  # noqa: E501
        :type birthdate: date
        :param curp: The curp of this UserProfile.  # noqa: E501
        :type curp: str
        :param mobile_number: The mobile_number of this UserProfile.  # noqa: E501
        :type mobile_number: str
        :param home_number: The home_number of this UserProfile.  # noqa: E501
        :type home_number: str
        :param office_number: The office_number of this UserProfile.  # noqa: E501
        :type office_number: str
        :param facebook_profile: The facebook_profile of this UserProfile.  # noqa: E501
        :type facebook_profile: str
        :param linkedin_profile: The linkedin_profile of this UserProfile.  # noqa: E501
        :type linkedin_profile: str
        :param twitter_profile: The twitter_profile of this UserProfile.  # noqa: E501
        :type twitter_profile: str
        :param image_profile: The image_profile of this UserProfile.  # noqa: E501
        :type image_profile: str
        :param status: The status of this UserProfile.  # noqa: E501
        :type status: int
        :param created: The created of this UserProfile.  # noqa: E501
        :type created: date
        :param updated: The updated of this UserProfile.  # noqa: E501
        :type updated: date
        :param credentials_id: The credentials_id of this UserProfile.  # noqa: E501
        :type credentials_id: int
        :param org_id: The org_id of this UserProfile.  # noqa: E501
        :type org_id: int
        :param address: The address of this UserProfile.  # noqa: E501
        :type address: Address
        """
        self.swagger_types = {
            'userprofile_id': int,
            'first_name': str,
            'second_name': str,
            'first_surname': str,
            'second_surname': str,
            'birthdate': date,
            'curp': str,
            'mobile_number': str,
            'home_number': str,
            'office_number': str,
            'facebook_profile': str,
            'linkedin_profile': str,
            'twitter_profile': str,
            'image_profile': str,
            'status': int,
            'created': date,
            'updated': date,
            'credentials_id': int,
            'org_id': int,
            'address': Address
        }

        self.attribute_map = {
            'userprofile_id': 'userprofileId',
            'first_name': 'firstName',
            'second_name': 'secondName',
            'first_surname': 'firstSurname',
            'second_surname': 'secondSurname',
            'birthdate': 'birthdate',
            'curp': 'curp',
            'mobile_number': 'mobileNumber',
            'home_number': 'homeNumber',
            'office_number': 'officeNumber',
            'facebook_profile': 'facebookProfile',
            'linkedin_profile': 'linkedinProfile',
            'twitter_profile': 'twitterProfile',
            'image_profile': 'idImage',
            'status': 'status',
            'created': 'created',
            'updated': 'updated',
            'credentials_id': 'credentialsId',
            'org_id': 'orgId',
            'address': 'address'
        }
        self._userprofile_id = userprofile_id
        self._first_name = first_name
        self._second_name = second_name
        self._first_surname = first_surname
        self._second_surname = second_surname
        self._birthdate = birthdate
        self._curp = curp
        self._mobile_number = mobile_number
        self._home_number = home_number
        self._office_number = office_number
        self._facebook_profile = facebook_profile
        self._linkedin_profile = linkedin_profile
        self._twitter_profile = twitter_profile
        self._image_profile = image_profile
        self._status = status
        self._created = created
        self._updated = updated
        self._credentials_id = credentials_id
        self._org_id = org_id
        self._address = address

    @classmethod
    def from_dict(cls, dikt) -> 'UserProfile':
        """Returns the dict as a model

        :param dikt: A dict.
        :type: dict
        :return: The UserProfile of this UserProfile.  # noqa: E501
        :rtype: UserProfile
        """
        return util.deserialize_model(dikt, cls)

    @property
    def userprofile_id(self) -> int:
        """Gets the userprofile_id of this UserProfile.

        id for index table  # noqa: E501

        :return: The userprofile_id of this UserProfile.
        :rtype: int
        """
        return self._userprofile_id

    @userprofile_id.setter
    def userprofile_id(self, userprofile_id: int):
        """Sets the userprofile_id of this UserProfile.

        id for index table  # noqa: E501

        :param userprofile_id: The userprofile_id of this UserProfile.
        :type userprofile_id: int
        """
        if userprofile_id is None:
            raise ValueError("Invalid value for `userprofile_id`, must not be `None`")  # noqa: E501

        self._userprofile_id = userprofile_id

    @property
    def first_name(self) -> str:
        """Gets the first_name of this UserProfile.

        The identifying name of the contact person.  # noqa: E501

        :return: The first_name of this UserProfile.
        :rtype: str
        """
        return self._first_name

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

        The identifying name of the contact person.  # noqa: E501

        :param first_name: The first_name of this UserProfile.
        :type first_name: str
        """
        if first_name is None:
            raise ValueError("Invalid value for `first_name`, must not be `None`")  # noqa: E501

        self._first_name = first_name

    @property
    def second_name(self) -> str:
        """Gets the second_name of this UserProfile.

        Name of the person  # noqa: E501

        :return: The second_name of this UserProfile.
        :rtype: str
        """
        return self._second_name

    @second_name.setter
    def second_name(self, second_name: str):
        """Sets the second_name of this UserProfile.

        Name of the person  # noqa: E501

        :param second_name: The second_name of this UserProfile.
        :type second_name: str
        """

        self._second_name = second_name

    @property
    def first_surname(self) -> str:
        """Gets the first_surname of this UserProfile.

        Name of the person  # noqa: E501

        :return: The first_surname of this UserProfile.
        :rtype: str
        """
        return self._first_surname

    @first_surname.setter
    def first_surname(self, first_surname: str):
        """Sets the first_surname of this UserProfile.

        Name of the person  # noqa: E501

        :param first_surname: The first_surname of this UserProfile.
        :type first_surname: str
        """
        if first_surname is None:
            raise ValueError("Invalid value for `first_surname`, must not be `None`")  # noqa: E501

        self._first_surname = first_surname

    @property
    def second_surname(self) -> str:
        """Gets the second_surname of this UserProfile.

        Name of the person  # noqa: E501

        :return: The second_surname of this UserProfile.
        :rtype: str
        """
        return self._second_surname

    @second_surname.setter
    def second_surname(self, second_surname: str):
        """Sets the second_surname of this UserProfile.

        Name of the person  # noqa: E501

        :param second_surname: The second_surname of this UserProfile.
        :type second_surname: str
        """

        self._second_surname = second_surname

    @property
    def birthdate(self) -> date:
        """Gets the birthdate of this UserProfile.

        Name of the person  # noqa: E501

        :return: The birthdate of this UserProfile.
        :rtype: date
        """
        return self._birthdate

    @birthdate.setter
    def birthdate(self, birthdate: date):
        """Sets the birthdate of this UserProfile.

        Name of the person  # noqa: E501

        :param birthdate: The birthdate of this UserProfile.
        :type birthdate: date
        """

        self._birthdate = birthdate

    @property
    def curp(self) -> str:
        """Gets the curp of this UserProfile.

        CURP  # noqa: E501

        :return: The curp of this UserProfile.
        :rtype: str
        """
        return self._curp

    @curp.setter
    def curp(self, curp: str):
        """Sets the curp of this UserProfile.

        CURP  # noqa: E501

        :param curp: The curp of this UserProfile.
        :type curp: str
        """

        self._curp = curp

    @property
    def mobile_number(self) -> str:
        """Gets the mobile_number of this UserProfile.

        Mobile number  # noqa: E501

        :return: The mobile_number of this UserProfile.
        :rtype: str
        """
        return self._mobile_number

    @mobile_number.setter
    def mobile_number(self, mobile_number: str):
        """Sets the mobile_number of this UserProfile.

        Mobile number  # noqa: E501

        :param mobile_number: The mobile_number of this UserProfile.
        :type mobile_number: str
        """

        self._mobile_number = mobile_number

    @property
    def home_number(self) -> str:
        """Gets the home_number of this UserProfile.

        Home number  # noqa: E501

        :return: The home_number of this UserProfile.
        :rtype: str
        """
        return self._home_number

    @home_number.setter
    def home_number(self, home_number: str):
        """Sets the home_number of this UserProfile.

        Home number  # noqa: E501

        :param home_number: The home_number of this UserProfile.
        :type home_number: str
        """

        self._home_number = home_number

    @property
    def office_number(self) -> str:
        """Gets the office_number of this UserProfile.

        Office telephone number  # noqa: E501

        :return: The office_number of this UserProfile.
        :rtype: str
        """
        return self._office_number

    @office_number.setter
    def office_number(self, office_number: str):
        """Sets the office_number of this UserProfile.

        Office telephone number  # noqa: E501

        :param office_number: The office_number of this UserProfile.
        :type office_number: str
        """

        self._office_number = office_number

    @property
    def facebook_profile(self) -> str:
        """Gets the facebook_profile of this UserProfile.

        facebook profile  # noqa: E501

        :return: The facebook_profile of this UserProfile.
        :rtype: str
        """
        return self._facebook_profile

    @facebook_profile.setter
    def facebook_profile(self, facebook_profile: str):
        """Sets the facebook_profile of this UserProfile.

        facebook profile  # noqa: E501

        :param facebook_profile: The facebook_profile of this UserProfile.
        :type facebook_profile: str
        """

        self._facebook_profile = facebook_profile

    @property
    def linkedin_profile(self) -> str:
        """Gets the linkedin_profile of this UserProfile.

        LinkedIn profile  # noqa: E501

        :return: The linkedin_profile of this UserProfile.
        :rtype: str
        """
        return self._linkedin_profile

    @linkedin_profile.setter
    def linkedin_profile(self, linkedin_profile: str):
        """Sets the linkedin_profile of this UserProfile.

        LinkedIn profile  # noqa: E501

        :param linkedin_profile: The linkedin_profile of this UserProfile.
        :type linkedin_profile: str
        """

        self._linkedin_profile = linkedin_profile

    @property
    def twitter_profile(self) -> str:
        """Gets the twitter_profile of this UserProfile.

        Twitter profile  # noqa: E501

        :return: The twitter_profile of this UserProfile.
        :rtype: str
        """
        return self._twitter_profile

    @twitter_profile.setter
    def twitter_profile(self, twitter_profile: str):
        """Sets the twitter_profile of this UserProfile.

        Twitter profile  # noqa: E501

        :param twitter_profile: The twitter_profile of this UserProfile.
        :type twitter_profile: str
        """

        self._twitter_profile = twitter_profile

    @property
    def image_profile(self) -> str:
        """Gets the image_profile of this UserProfile.

        Name of the id file  # noqa: E501

        :return: The image_profile of this UserProfile.
        :rtype: str
        """
        return self._image_profile

    @image_profile.setter
    def image_profile(self, image_profile: str):
        """Sets the image_profile of this UserProfile.

        Name of the id file  # noqa: E501

        :param image_profile: The image_profile of this UserProfile.
        :type image_profile: str
        """

        self._image_profile = image_profile

    @property
    def status(self) -> int:
        """Gets the status of this UserProfile.

        Status of the profile  # noqa: E501

        :return: The status of this UserProfile.
        :rtype: int
        """
        return self._status

    @status.setter
    def status(self, status: int):
        """Sets the status of this UserProfile.

        Status of the profile  # noqa: E501

        :param status: The status of this UserProfile.
        :type status: int
        """

        self._status = status

    @property
    def created(self) -> date:
        """Gets the created of this UserProfile.

        Date of registration  # noqa: E501

        :return: The created of this UserProfile.
        :rtype: date
        """
        return self._created

    @created.setter
    def created(self, created: date):
        """Sets the created of this UserProfile.

        Date of registration  # noqa: E501

        :param created: The created of this UserProfile.
        :type created: date
        """

        self._created = created

    @property
    def updated(self) -> date:
        """Gets the updated of this UserProfile.

        Day of latest update  # noqa: E501

        :return: The updated of this UserProfile.
        :rtype: date
        """
        return self._updated

    @updated.setter
    def updated(self, updated: date):
        """Sets the updated of this UserProfile.

        Day of latest update  # noqa: E501

        :param updated: The updated of this UserProfile.
        :type updated: date
        """

        self._updated = updated

    @property
    def credentials_id(self) -> int:
        """Gets the credentials_id of this UserProfile.

        id to credentials table  # noqa: E501

        :return: The credentials_id of this UserProfile.
        :rtype: int
        """
        return self._credentials_id

    @credentials_id.setter
    def credentials_id(self, credentials_id: int):
        """Sets the credentials_id of this UserProfile.

        id to credentials table  # noqa: E501

        :param credentials_id: The credentials_id of this UserProfile.
        :type credentials_id: int
        """

        self._credentials_id = credentials_id

    @property
    def org_id(self) -> int:
        """Gets the org_id of this UserProfile.

        Foreing key to Organizations  # noqa: E501

        :return: The org_id of this UserProfile.
        :rtype: int
        """
        return self._org_id

    @org_id.setter
    def org_id(self, org_id: int):
        """Sets the org_id of this UserProfile.

        Foreing key to Organizations  # noqa: E501

        :param org_id: The org_id of this UserProfile.
        :type org_id: int
        """

        self._org_id = org_id

    @property
    def address(self) -> Address:
        """Gets the address of this UserProfile.


        :return: The address of this UserProfile.
        :rtype: Address
        """
        return self._address

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


        :param address: The address of this UserProfile.
        :type address: Address
        """

        self._address = address
