# coding: utf-8

"""
    SYSNET CRZP connector API

    SYSNET CRŽP connector REST API (IPPC & CITES extension)  # noqa: E501

    OpenAPI spec version: 1.1.0
    Contact: info@sysnet.cz
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""

import pprint
import re  # noqa: F401

import six

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

    Do not edit the class manually.
    """
    """
    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 = {
        'subject_type': 'str',
        'active': 'bool',
        'allow_iszr_sync': 'bool',
        'artificial_id': 'str',
        'author': 'str',
        'created': 'datetime',
        'updated': 'datetime',
        'deleted': 'datetime',
        'email': 'str',
        'id': 'str',
        'in_crzp_since': 'datetime',
        'isds_id': 'str',
        'last_iszr_sync': 'datetime',
        'note': 'str',
        'phone': 'str',
        'version': 'int',
        'web_site': 'str',
        'role': 'list[RoleReference]',
        'agenda': 'list[AgendaSubjectDetail]',
        'legal_entity': 'LegalEntityPart',
        'person': 'PersonPart',
        'residence': 'Address'
    }

    attribute_map = {
        'subject_type': 'subjectType',
        'active': 'active',
        'allow_iszr_sync': 'allowIszrSync',
        'artificial_id': 'artificialId',
        'author': 'author',
        'created': 'created',
        'updated': 'updated',
        'deleted': 'deleted',
        'email': 'email',
        'id': 'id',
        'in_crzp_since': 'inCrzpSince',
        'isds_id': 'isdsId',
        'last_iszr_sync': 'lastIszrSync',
        'note': 'note',
        'phone': 'phone',
        'version': 'version',
        'web_site': 'webSite',
        'role': 'role',
        'agenda': 'agenda',
        'legal_entity': 'legalEntity',
        'person': 'person',
        'residence': 'residence'
    }

    def __init__(self, subject_type=None, active=None, allow_iszr_sync=None, artificial_id=None, author=None, created=None, updated=None, deleted=None, email=None, id=None, in_crzp_since=None, isds_id=None, last_iszr_sync=None, note=None, phone=None, version=None, web_site=None, role=None, agenda=None, legal_entity=None, person=None, residence=None):  # noqa: E501
        """SubjectDetail - a model defined in Swagger"""  # noqa: E501
        self._subject_type = None
        self._active = None
        self._allow_iszr_sync = None
        self._artificial_id = None
        self._author = None
        self._created = None
        self._updated = None
        self._deleted = None
        self._email = None
        self._id = None
        self._in_crzp_since = None
        self._isds_id = None
        self._last_iszr_sync = None
        self._note = None
        self._phone = None
        self._version = None
        self._web_site = None
        self._role = None
        self._agenda = None
        self._legal_entity = None
        self._person = None
        self._residence = None
        self.discriminator = None
        if subject_type is not None:
            self.subject_type = subject_type
        if active is not None:
            self.active = active
        if allow_iszr_sync is not None:
            self.allow_iszr_sync = allow_iszr_sync
        if artificial_id is not None:
            self.artificial_id = artificial_id
        if author is not None:
            self.author = author
        if created is not None:
            self.created = created
        if updated is not None:
            self.updated = updated
        if deleted is not None:
            self.deleted = deleted
        if email is not None:
            self.email = email
        if id is not None:
            self.id = id
        if in_crzp_since is not None:
            self.in_crzp_since = in_crzp_since
        if isds_id is not None:
            self.isds_id = isds_id
        if last_iszr_sync is not None:
            self.last_iszr_sync = last_iszr_sync
        if note is not None:
            self.note = note
        if phone is not None:
            self.phone = phone
        if version is not None:
            self.version = version
        if web_site is not None:
            self.web_site = web_site
        if role is not None:
            self.role = role
        if agenda is not None:
            self.agenda = agenda
        if legal_entity is not None:
            self.legal_entity = legal_entity
        if person is not None:
            self.person = person
        if residence is not None:
            self.residence = residence

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

        'Může nabývat hodnot: legal_entity, legal_entit_without_ico, ' 'foreign_legal_entity, natural_person, business_natural_person, ' 'foreign_natural_person'   # noqa: E501

        :return: The subject_type of this SubjectDetail.  # noqa: E501
        :rtype: str
        """
        return self._subject_type

    @subject_type.setter
    def subject_type(self, subject_type):
        """Sets the subject_type of this SubjectDetail.

        'Může nabývat hodnot: legal_entity, legal_entit_without_ico, ' 'foreign_legal_entity, natural_person, business_natural_person, ' 'foreign_natural_person'   # noqa: E501

        :param subject_type: The subject_type of this SubjectDetail.  # noqa: E501
        :type: str
        """

        self._subject_type = subject_type

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


        :return: The active of this SubjectDetail.  # noqa: E501
        :rtype: bool
        """
        return self._active

    @active.setter
    def active(self, active):
        """Sets the active of this SubjectDetail.


        :param active: The active of this SubjectDetail.  # noqa: E501
        :type: bool
        """

        self._active = active

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


        :return: The allow_iszr_sync of this SubjectDetail.  # noqa: E501
        :rtype: bool
        """
        return self._allow_iszr_sync

    @allow_iszr_sync.setter
    def allow_iszr_sync(self, allow_iszr_sync):
        """Sets the allow_iszr_sync of this SubjectDetail.


        :param allow_iszr_sync: The allow_iszr_sync of this SubjectDetail.  # noqa: E501
        :type: bool
        """

        self._allow_iszr_sync = allow_iszr_sync

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


        :return: The artificial_id of this SubjectDetail.  # noqa: E501
        :rtype: str
        """
        return self._artificial_id

    @artificial_id.setter
    def artificial_id(self, artificial_id):
        """Sets the artificial_id of this SubjectDetail.


        :param artificial_id: The artificial_id of this SubjectDetail.  # noqa: E501
        :type: str
        """

        self._artificial_id = artificial_id

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


        :return: The author of this SubjectDetail.  # noqa: E501
        :rtype: str
        """
        return self._author

    @author.setter
    def author(self, author):
        """Sets the author of this SubjectDetail.


        :param author: The author of this SubjectDetail.  # noqa: E501
        :type: str
        """

        self._author = author

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


        :return: The created of this SubjectDetail.  # noqa: E501
        :rtype: datetime
        """
        return self._created

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


        :param created: The created of this SubjectDetail.  # noqa: E501
        :type: datetime
        """

        self._created = created

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


        :return: The updated of this SubjectDetail.  # noqa: E501
        :rtype: datetime
        """
        return self._updated

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


        :param updated: The updated of this SubjectDetail.  # noqa: E501
        :type: datetime
        """

        self._updated = updated

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


        :return: The deleted of this SubjectDetail.  # noqa: E501
        :rtype: datetime
        """
        return self._deleted

    @deleted.setter
    def deleted(self, deleted):
        """Sets the deleted of this SubjectDetail.


        :param deleted: The deleted of this SubjectDetail.  # noqa: E501
        :type: datetime
        """

        self._deleted = deleted

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


        :return: The email of this SubjectDetail.  # noqa: E501
        :rtype: str
        """
        return self._email

    @email.setter
    def email(self, email):
        """Sets the email of this SubjectDetail.


        :param email: The email of this SubjectDetail.  # noqa: E501
        :type: str
        """

        self._email = email

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


        :return: The id of this SubjectDetail.  # noqa: E501
        :rtype: str
        """
        return self._id

    @id.setter
    def id(self, id):
        """Sets the id of this SubjectDetail.


        :param id: The id of this SubjectDetail.  # noqa: E501
        :type: str
        """

        self._id = id

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


        :return: The in_crzp_since of this SubjectDetail.  # noqa: E501
        :rtype: datetime
        """
        return self._in_crzp_since

    @in_crzp_since.setter
    def in_crzp_since(self, in_crzp_since):
        """Sets the in_crzp_since of this SubjectDetail.


        :param in_crzp_since: The in_crzp_since of this SubjectDetail.  # noqa: E501
        :type: datetime
        """

        self._in_crzp_since = in_crzp_since

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


        :return: The isds_id of this SubjectDetail.  # noqa: E501
        :rtype: str
        """
        return self._isds_id

    @isds_id.setter
    def isds_id(self, isds_id):
        """Sets the isds_id of this SubjectDetail.


        :param isds_id: The isds_id of this SubjectDetail.  # noqa: E501
        :type: str
        """

        self._isds_id = isds_id

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


        :return: The last_iszr_sync of this SubjectDetail.  # noqa: E501
        :rtype: datetime
        """
        return self._last_iszr_sync

    @last_iszr_sync.setter
    def last_iszr_sync(self, last_iszr_sync):
        """Sets the last_iszr_sync of this SubjectDetail.


        :param last_iszr_sync: The last_iszr_sync of this SubjectDetail.  # noqa: E501
        :type: datetime
        """

        self._last_iszr_sync = last_iszr_sync

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


        :return: The note of this SubjectDetail.  # noqa: E501
        :rtype: str
        """
        return self._note

    @note.setter
    def note(self, note):
        """Sets the note of this SubjectDetail.


        :param note: The note of this SubjectDetail.  # noqa: E501
        :type: str
        """

        self._note = note

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


        :return: The phone of this SubjectDetail.  # noqa: E501
        :rtype: str
        """
        return self._phone

    @phone.setter
    def phone(self, phone):
        """Sets the phone of this SubjectDetail.


        :param phone: The phone of this SubjectDetail.  # noqa: E501
        :type: str
        """

        self._phone = phone

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


        :return: The version of this SubjectDetail.  # noqa: E501
        :rtype: int
        """
        return self._version

    @version.setter
    def version(self, version):
        """Sets the version of this SubjectDetail.


        :param version: The version of this SubjectDetail.  # noqa: E501
        :type: int
        """

        self._version = version

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


        :return: The web_site of this SubjectDetail.  # noqa: E501
        :rtype: str
        """
        return self._web_site

    @web_site.setter
    def web_site(self, web_site):
        """Sets the web_site of this SubjectDetail.


        :param web_site: The web_site of this SubjectDetail.  # noqa: E501
        :type: str
        """

        self._web_site = web_site

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


        :return: The role of this SubjectDetail.  # noqa: E501
        :rtype: list[RoleReference]
        """
        return self._role

    @role.setter
    def role(self, role):
        """Sets the role of this SubjectDetail.


        :param role: The role of this SubjectDetail.  # noqa: E501
        :type: list[RoleReference]
        """

        self._role = role

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


        :return: The agenda of this SubjectDetail.  # noqa: E501
        :rtype: list[AgendaSubjectDetail]
        """
        return self._agenda

    @agenda.setter
    def agenda(self, agenda):
        """Sets the agenda of this SubjectDetail.


        :param agenda: The agenda of this SubjectDetail.  # noqa: E501
        :type: list[AgendaSubjectDetail]
        """

        self._agenda = agenda

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


        :return: The legal_entity of this SubjectDetail.  # noqa: E501
        :rtype: LegalEntityPart
        """
        return self._legal_entity

    @legal_entity.setter
    def legal_entity(self, legal_entity):
        """Sets the legal_entity of this SubjectDetail.


        :param legal_entity: The legal_entity of this SubjectDetail.  # noqa: E501
        :type: LegalEntityPart
        """

        self._legal_entity = legal_entity

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


        :return: The person of this SubjectDetail.  # noqa: E501
        :rtype: PersonPart
        """
        return self._person

    @person.setter
    def person(self, person):
        """Sets the person of this SubjectDetail.


        :param person: The person of this SubjectDetail.  # noqa: E501
        :type: PersonPart
        """

        self._person = person

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


        :return: The residence of this SubjectDetail.  # noqa: E501
        :rtype: Address
        """
        return self._residence

    @residence.setter
    def residence(self, residence):
        """Sets the residence of this SubjectDetail.


        :param residence: The residence of this SubjectDetail.  # noqa: E501
        :type: Address
        """

        self._residence = residence

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

        return self.__dict__ == other.__dict__

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