# coding: utf-8

"""
    API pro taxonomii CITES

    Toto je API pro taxonomii CITES  # noqa: E501

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

import pprint
import re  # noqa: F401

import six
from taxonomy.models.taxon_entry_type import TaxonEntryType  # noqa: F401,E501

class TaxonType(TaxonEntryType):
    """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 = {
        'id_species_plus': 'list[str]',
        'name_listed': 'str',
        'rank_regnum': 'str',
        'rank_phylum': 'str',
        'rank_divisio': 'str',
        'rank_classis': 'str',
        'rank_ordo': 'str',
        'rank_familia': 'str',
        'rank_genus': 'str',
        'rank_species': 'str',
        'rank_subspecies': 'str',
        'rank_varietas': 'str',
        'rank': 'str',
        'rank_hybrid': 'str',
        'regulation_102': 'bool',
        'regulation_114': 'str',
        'regulation_411': 'bool',
        'regulation_449': 'str',
        'regulation_95': 'bool',
        'synonyms': 'list[str]',
        'is_valid': 'bool',
        'is_published': 'bool',
        'is_deleted': 'bool',
        'hybrid': 'HybridType',
        'additional': 'AdditionalType'
    }
    if hasattr(TaxonEntryType, "swagger_types"):
        swagger_types.update(TaxonEntryType.swagger_types)

    attribute_map = {
        'id_species_plus': 'id_species_plus',
        'name_listed': 'name_listed',
        'rank_regnum': 'rank_regnum',
        'rank_phylum': 'rank_phylum',
        'rank_divisio': 'rank_divisio',
        'rank_classis': 'rank_classis',
        'rank_ordo': 'rank_ordo',
        'rank_familia': 'rank_familia',
        'rank_genus': 'rank_genus',
        'rank_species': 'rank_species',
        'rank_subspecies': 'rank_subspecies',
        'rank_varietas': 'rank_varietas',
        'rank': 'rank',
        'rank_hybrid': 'rank_hybrid',
        'regulation_102': 'regulation_102',
        'regulation_114': 'regulation_114',
        'regulation_411': 'regulation_411',
        'regulation_449': 'regulation_449',
        'regulation_95': 'regulation_95',
        'synonyms': 'synonyms',
        'is_valid': 'is_valid',
        'is_published': 'is_published',
        'is_deleted': 'is_deleted',
        'hybrid': 'hybrid',
        'additional': 'additional'
    }
    if hasattr(TaxonEntryType, "attribute_map"):
        attribute_map.update(TaxonEntryType.attribute_map)

    def __init__(self, id_species_plus=None, name_listed=None, rank_regnum=None, rank_phylum=None, rank_divisio=None, rank_classis=None, rank_ordo=None, rank_familia=None, rank_genus=None, rank_species=None, rank_subspecies=None, rank_varietas=None, rank=None, rank_hybrid=None, regulation_102=None, regulation_114=None, regulation_411=None, regulation_449=None, regulation_95=None, synonyms=None, is_valid=None, is_published=None, is_deleted=None, hybrid=None, additional=None, *args, **kwargs):  # noqa: E501
        """TaxonType - a model defined in Swagger"""  # noqa: E501
        self._id_species_plus = None
        self._name_listed = None
        self._rank_regnum = None
        self._rank_phylum = None
        self._rank_divisio = None
        self._rank_classis = None
        self._rank_ordo = None
        self._rank_familia = None
        self._rank_genus = None
        self._rank_species = None
        self._rank_subspecies = None
        self._rank_varietas = None
        self._rank = None
        self._rank_hybrid = None
        self._regulation_102 = None
        self._regulation_114 = None
        self._regulation_411 = None
        self._regulation_449 = None
        self._regulation_95 = None
        self._synonyms = None
        self._is_valid = None
        self._is_published = None
        self._is_deleted = None
        self._hybrid = None
        self._additional = None
        self.discriminator = None
        if id_species_plus is not None:
            self.id_species_plus = id_species_plus
        if name_listed is not None:
            self.name_listed = name_listed
        if rank_regnum is not None:
            self.rank_regnum = rank_regnum
        if rank_phylum is not None:
            self.rank_phylum = rank_phylum
        if rank_divisio is not None:
            self.rank_divisio = rank_divisio
        if rank_classis is not None:
            self.rank_classis = rank_classis
        if rank_ordo is not None:
            self.rank_ordo = rank_ordo
        if rank_familia is not None:
            self.rank_familia = rank_familia
        if rank_genus is not None:
            self.rank_genus = rank_genus
        if rank_species is not None:
            self.rank_species = rank_species
        if rank_subspecies is not None:
            self.rank_subspecies = rank_subspecies
        if rank_varietas is not None:
            self.rank_varietas = rank_varietas
        if rank is not None:
            self.rank = rank
        if rank_hybrid is not None:
            self.rank_hybrid = rank_hybrid
        if regulation_102 is not None:
            self.regulation_102 = regulation_102
        if regulation_114 is not None:
            self.regulation_114 = regulation_114
        if regulation_411 is not None:
            self.regulation_411 = regulation_411
        if regulation_449 is not None:
            self.regulation_449 = regulation_449
        if regulation_95 is not None:
            self.regulation_95 = regulation_95
        if synonyms is not None:
            self.synonyms = synonyms
        if is_valid is not None:
            self.is_valid = is_valid
        if is_published is not None:
            self.is_published = is_published
        if is_deleted is not None:
            self.is_deleted = is_deleted
        if hybrid is not None:
            self.hybrid = hybrid
        if additional is not None:
            self.additional = additional
        TaxonEntryType.__init__(self, *args, **kwargs)

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

        Identifikátor species+  # noqa: E501

        :return: The id_species_plus of this TaxonType.  # noqa: E501
        :rtype: list[str]
        """
        return self._id_species_plus

    @id_species_plus.setter
    def id_species_plus(self, id_species_plus):
        """Sets the id_species_plus of this TaxonType.

        Identifikátor species+  # noqa: E501

        :param id_species_plus: The id_species_plus of this TaxonType.  # noqa: E501
        :type: list[str]
        """

        self._id_species_plus = id_species_plus

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

        listed_under (species+)  # noqa: E501

        :return: The name_listed of this TaxonType.  # noqa: E501
        :rtype: str
        """
        return self._name_listed

    @name_listed.setter
    def name_listed(self, name_listed):
        """Sets the name_listed of this TaxonType.

        listed_under (species+)  # noqa: E501

        :param name_listed: The name_listed of this TaxonType.  # noqa: E501
        :type: str
        """

        self._name_listed = name_listed

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

        Říše  # noqa: E501

        :return: The rank_regnum of this TaxonType.  # noqa: E501
        :rtype: str
        """
        return self._rank_regnum

    @rank_regnum.setter
    def rank_regnum(self, rank_regnum):
        """Sets the rank_regnum of this TaxonType.

        Říše  # noqa: E501

        :param rank_regnum: The rank_regnum of this TaxonType.  # noqa: E501
        :type: str
        """

        self._rank_regnum = rank_regnum

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

        Kmen  # noqa: E501

        :return: The rank_phylum of this TaxonType.  # noqa: E501
        :rtype: str
        """
        return self._rank_phylum

    @rank_phylum.setter
    def rank_phylum(self, rank_phylum):
        """Sets the rank_phylum of this TaxonType.

        Kmen  # noqa: E501

        :param rank_phylum: The rank_phylum of this TaxonType.  # noqa: E501
        :type: str
        """

        self._rank_phylum = rank_phylum

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

        Oddělení (pro botaniku)  # noqa: E501

        :return: The rank_divisio of this TaxonType.  # noqa: E501
        :rtype: str
        """
        return self._rank_divisio

    @rank_divisio.setter
    def rank_divisio(self, rank_divisio):
        """Sets the rank_divisio of this TaxonType.

        Oddělení (pro botaniku)  # noqa: E501

        :param rank_divisio: The rank_divisio of this TaxonType.  # noqa: E501
        :type: str
        """

        self._rank_divisio = rank_divisio

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

        Třída  # noqa: E501

        :return: The rank_classis of this TaxonType.  # noqa: E501
        :rtype: str
        """
        return self._rank_classis

    @rank_classis.setter
    def rank_classis(self, rank_classis):
        """Sets the rank_classis of this TaxonType.

        Třída  # noqa: E501

        :param rank_classis: The rank_classis of this TaxonType.  # noqa: E501
        :type: str
        """

        self._rank_classis = rank_classis

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

        Řád  # noqa: E501

        :return: The rank_ordo of this TaxonType.  # noqa: E501
        :rtype: str
        """
        return self._rank_ordo

    @rank_ordo.setter
    def rank_ordo(self, rank_ordo):
        """Sets the rank_ordo of this TaxonType.

        Řád  # noqa: E501

        :param rank_ordo: The rank_ordo of this TaxonType.  # noqa: E501
        :type: str
        """

        self._rank_ordo = rank_ordo

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

        Čeleď  # noqa: E501

        :return: The rank_familia of this TaxonType.  # noqa: E501
        :rtype: str
        """
        return self._rank_familia

    @rank_familia.setter
    def rank_familia(self, rank_familia):
        """Sets the rank_familia of this TaxonType.

        Čeleď  # noqa: E501

        :param rank_familia: The rank_familia of this TaxonType.  # noqa: E501
        :type: str
        """

        self._rank_familia = rank_familia

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

        Rod  # noqa: E501

        :return: The rank_genus of this TaxonType.  # noqa: E501
        :rtype: str
        """
        return self._rank_genus

    @rank_genus.setter
    def rank_genus(self, rank_genus):
        """Sets the rank_genus of this TaxonType.

        Rod  # noqa: E501

        :param rank_genus: The rank_genus of this TaxonType.  # noqa: E501
        :type: str
        """

        self._rank_genus = rank_genus

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

        Druh  # noqa: E501

        :return: The rank_species of this TaxonType.  # noqa: E501
        :rtype: str
        """
        return self._rank_species

    @rank_species.setter
    def rank_species(self, rank_species):
        """Sets the rank_species of this TaxonType.

        Druh  # noqa: E501

        :param rank_species: The rank_species of this TaxonType.  # noqa: E501
        :type: str
        """

        self._rank_species = rank_species

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

        Poddruh  # noqa: E501

        :return: The rank_subspecies of this TaxonType.  # noqa: E501
        :rtype: str
        """
        return self._rank_subspecies

    @rank_subspecies.setter
    def rank_subspecies(self, rank_subspecies):
        """Sets the rank_subspecies of this TaxonType.

        Poddruh  # noqa: E501

        :param rank_subspecies: The rank_subspecies of this TaxonType.  # noqa: E501
        :type: str
        """

        self._rank_subspecies = rank_subspecies

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

        Varieta  # noqa: E501

        :return: The rank_varietas of this TaxonType.  # noqa: E501
        :rtype: str
        """
        return self._rank_varietas

    @rank_varietas.setter
    def rank_varietas(self, rank_varietas):
        """Sets the rank_varietas of this TaxonType.

        Varieta  # noqa: E501

        :param rank_varietas: The rank_varietas of this TaxonType.  # noqa: E501
        :type: str
        """

        self._rank_varietas = rank_varietas

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

        Nejnižší taxonomické rozlišení položky (SPECIES, SUBSPECIES, VARIETY)   # noqa: E501

        :return: The rank of this TaxonType.  # noqa: E501
        :rtype: str
        """
        return self._rank

    @rank.setter
    def rank(self, rank):
        """Sets the rank of this TaxonType.

        Nejnižší taxonomické rozlišení položky (SPECIES, SUBSPECIES, VARIETY)   # noqa: E501

        :param rank: The rank of this TaxonType.  # noqa: E501
        :type: str
        """

        self._rank = rank

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

        Kříženec  # noqa: E501

        :return: The rank_hybrid of this TaxonType.  # noqa: E501
        :rtype: str
        """
        return self._rank_hybrid

    @rank_hybrid.setter
    def rank_hybrid(self, rank_hybrid):
        """Sets the rank_hybrid of this TaxonType.

        Kříženec  # noqa: E501

        :param rank_hybrid: The rank_hybrid of this TaxonType.  # noqa: E501
        :type: str
        """

        self._rank_hybrid = rank_hybrid

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

        Exemplář sledovaný podle zákona č. 102/19963 Sb. (rybářství)  # noqa: E501

        :return: The regulation_102 of this TaxonType.  # noqa: E501
        :rtype: bool
        """
        return self._regulation_102

    @regulation_102.setter
    def regulation_102(self, regulation_102):
        """Sets the regulation_102 of this TaxonType.

        Exemplář sledovaný podle zákona č. 102/19963 Sb. (rybářství)  # noqa: E501

        :param regulation_102: The regulation_102 of this TaxonType.  # noqa: E501
        :type: bool
        """

        self._regulation_102 = regulation_102

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

        Exemplář sledovaný podle zákona č. 114/1997 Sb. (ochrana přírody)  # noqa: E501

        :return: The regulation_114 of this TaxonType.  # noqa: E501
        :rtype: str
        """
        return self._regulation_114

    @regulation_114.setter
    def regulation_114(self, regulation_114):
        """Sets the regulation_114 of this TaxonType.

        Exemplář sledovaný podle zákona č. 114/1997 Sb. (ochrana přírody)  # noqa: E501

        :param regulation_114: The regulation_114 of this TaxonType.  # noqa: E501
        :type: str
        """

        self._regulation_114 = regulation_114

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

        Exemplář sledovaný podle vyhlášky č. 411/2008 Sb., kterou se stanoví druhy zvířat vyžadující zvláštní péči  # noqa: E501

        :return: The regulation_411 of this TaxonType.  # noqa: E501
        :rtype: bool
        """
        return self._regulation_411

    @regulation_411.setter
    def regulation_411(self, regulation_411):
        """Sets the regulation_411 of this TaxonType.

        Exemplář sledovaný podle vyhlášky č. 411/2008 Sb., kterou se stanoví druhy zvířat vyžadující zvláštní péči  # noqa: E501

        :param regulation_411: The regulation_411 of this TaxonType.  # noqa: E501
        :type: bool
        """

        self._regulation_411 = regulation_411

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

        Exemplář sledovaný podle zákona 449 (myslivost)  # noqa: E501

        :return: The regulation_449 of this TaxonType.  # noqa: E501
        :rtype: str
        """
        return self._regulation_449

    @regulation_449.setter
    def regulation_449(self, regulation_449):
        """Sets the regulation_449 of this TaxonType.

        Exemplář sledovaný podle zákona 449 (myslivost)  # noqa: E501

        :param regulation_449: The regulation_449 of this TaxonType.  # noqa: E501
        :type: str
        """
        allowed_values = ["A", "B", "", None]  # noqa: E501
        if regulation_449 not in allowed_values:
            raise ValueError(
                "Invalid value for `regulation_449` ({0}), must be one of {1}"  # noqa: E501
                .format(regulation_449, allowed_values)
            )

        self._regulation_449 = regulation_449

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

        Exemplář sledovaný podle vyhláška č. 95/1996 Sb. (nebezpečná zvířata)  # noqa: E501

        :return: The regulation_95 of this TaxonType.  # noqa: E501
        :rtype: bool
        """
        return self._regulation_95

    @regulation_95.setter
    def regulation_95(self, regulation_95):
        """Sets the regulation_95 of this TaxonType.

        Exemplář sledovaný podle vyhláška č. 95/1996 Sb. (nebezpečná zvířata)  # noqa: E501

        :param regulation_95: The regulation_95 of this TaxonType.  # noqa: E501
        :type: bool
        """

        self._regulation_95 = regulation_95

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

        variantní vědecké názvy pro stejný taxon  # noqa: E501

        :return: The synonyms of this TaxonType.  # noqa: E501
        :rtype: list[str]
        """
        return self._synonyms

    @synonyms.setter
    def synonyms(self, synonyms):
        """Sets the synonyms of this TaxonType.

        variantní vědecké názvy pro stejný taxon  # noqa: E501

        :param synonyms: The synonyms of this TaxonType.  # noqa: E501
        :type: list[str]
        """

        self._synonyms = synonyms

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

        je taxon validní?  # noqa: E501

        :return: The is_valid of this TaxonType.  # noqa: E501
        :rtype: bool
        """
        return self._is_valid

    @is_valid.setter
    def is_valid(self, is_valid):
        """Sets the is_valid of this TaxonType.

        je taxon validní?  # noqa: E501

        :param is_valid: The is_valid of this TaxonType.  # noqa: E501
        :type: bool
        """

        self._is_valid = is_valid

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

        je taxon publikován v našeptávačích?  # noqa: E501

        :return: The is_published of this TaxonType.  # noqa: E501
        :rtype: bool
        """
        return self._is_published

    @is_published.setter
    def is_published(self, is_published):
        """Sets the is_published of this TaxonType.

        je taxon publikován v našeptávačích?  # noqa: E501

        :param is_published: The is_published of this TaxonType.  # noqa: E501
        :type: bool
        """

        self._is_published = is_published

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

        je taxon odstraněn?  # noqa: E501

        :return: The is_deleted of this TaxonType.  # noqa: E501
        :rtype: bool
        """
        return self._is_deleted

    @is_deleted.setter
    def is_deleted(self, is_deleted):
        """Sets the is_deleted of this TaxonType.

        je taxon odstraněn?  # noqa: E501

        :param is_deleted: The is_deleted of this TaxonType.  # noqa: E501
        :type: bool
        """

        self._is_deleted = is_deleted

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


        :return: The hybrid of this TaxonType.  # noqa: E501
        :rtype: HybridType
        """
        return self._hybrid

    @hybrid.setter
    def hybrid(self, hybrid):
        """Sets the hybrid of this TaxonType.


        :param hybrid: The hybrid of this TaxonType.  # noqa: E501
        :type: HybridType
        """

        self._hybrid = hybrid

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


        :return: The additional of this TaxonType.  # noqa: E501
        :rtype: AdditionalType
        """
        return self._additional

    @additional.setter
    def additional(self, additional):
        """Sets the additional of this TaxonType.


        :param additional: The additional of this TaxonType.  # noqa: E501
        :type: AdditionalType
        """

        self._additional = additional

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

        return self.__dict__ == other.__dict__

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