# coding: utf-8

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

from typing import List, Dict  # noqa: F401

from swagger_server.models.base_model_ import Model
from swagger_server.models.breed import Breed  # noqa: F401,E501
from swagger_server.models.category import Category  # noqa: F401,E501
from swagger_server.models.color import Color  # noqa: F401,E501
from swagger_server.models.fur_length import FurLength  # noqa: F401,E501
from swagger_server.models.gender import Gender  # noqa: F401,E501
from swagger_server.models.health import Health  # noqa: F401,E501
from swagger_server.models.maturity_size import MaturitySize  # noqa: F401,E501
from swagger_server.models.sterilized import Sterilized  # noqa: F401,E501
from swagger_server.models.type import Type  # noqa: F401,E501
from swagger_server.models.vaccinated import Vaccinated  # noqa: F401,E501
from swagger_server import util


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

    Do not edit the class manually.
    """
    def __init__(self, id: int=None, adoption_speed: Category=None, name: str=None, age: int=None, breed1: Breed=None, breed2: Breed=None, gender: Gender=None, color1: Color=None, color2: Color=None, color3: Color=None, maturity_size: MaturitySize=None, fur_length: FurLength=None, vaccinated: Vaccinated=None, health: Health=None, sterilized: Sterilized=None, dewormed: bool=None, fee: float=None, photo: str=None, animal_type: Type=None):  # noqa: E501
        """Pet - a model defined in Swagger

        :param id: The id of this Pet.  # noqa: E501
        :type id: int
        :param adoption_speed: The adoption_speed of this Pet.  # noqa: E501
        :type adoption_speed: Category
        :param name: The name of this Pet.  # noqa: E501
        :type name: str
        :param age: The age of this Pet.  # noqa: E501
        :type age: int
        :param breed1: The breed1 of this Pet.  # noqa: E501
        :type breed1: Breed
        :param breed2: The breed2 of this Pet.  # noqa: E501
        :type breed2: Breed
        :param gender: The gender of this Pet.  # noqa: E501
        :type gender: Gender
        :param color1: The color1 of this Pet.  # noqa: E501
        :type color1: Color
        :param color2: The color2 of this Pet.  # noqa: E501
        :type color2: Color
        :param color3: The color3 of this Pet.  # noqa: E501
        :type color3: Color
        :param maturity_size: The maturity_size of this Pet.  # noqa: E501
        :type maturity_size: MaturitySize
        :param fur_length: The fur_length of this Pet.  # noqa: E501
        :type fur_length: FurLength
        :param vaccinated: The vaccinated of this Pet.  # noqa: E501
        :type vaccinated: Vaccinated
        :param health: The health of this Pet.  # noqa: E501
        :type health: Health
        :param sterilized: The sterilized of this Pet.  # noqa: E501
        :type sterilized: Sterilized
        :param dewormed: The dewormed of this Pet.  # noqa: E501
        :type dewormed: bool
        :param fee: The fee of this Pet.  # noqa: E501
        :type fee: float
        :param photo: The photo of this Pet.  # noqa: E501
        :type photo: str
        :param animal_type: The animal_type of this Pet.  # noqa: E501
        :type animal_type: Type
        """
        self.swagger_types = {
            'id': int,
            'adoption_speed': Category,
            'name': str,
            'age': int,
            'breed1': Breed,
            'breed2': Breed,
            'gender': Gender,
            'color1': Color,
            'color2': Color,
            'color3': Color,
            'maturity_size': MaturitySize,
            'fur_length': FurLength,
            'vaccinated': Vaccinated,
            'health': Health,
            'sterilized': Sterilized,
            'dewormed': bool,
            'fee': float,
            'photo': str,
            'animal_type': Type
        }

        self.attribute_map = {
            'id': 'id',
            'adoption_speed': 'adoptionSpeed',
            'name': 'name',
            'age': 'age',
            'breed1': 'breed1',
            'breed2': 'breed2',
            'gender': 'gender',
            'color1': 'color1',
            'color2': 'color2',
            'color3': 'color3',
            'maturity_size': 'maturitySize',
            'fur_length': 'furLength',
            'vaccinated': 'vaccinated',
            'health': 'health',
            'sterilized': 'sterilized',
            'dewormed': 'dewormed',
            'fee': 'fee',
            'photo': 'photo',
            'animal_type': 'animalType'
        }
        self._id = id
        self._adoption_speed = adoption_speed
        self._name = name
        self._age = age
        self._breed1 = breed1
        self._breed2 = breed2
        self._gender = gender
        self._color1 = color1
        self._color2 = color2
        self._color3 = color3
        self._maturity_size = maturity_size
        self._fur_length = fur_length
        self._vaccinated = vaccinated
        self._health = health
        self._sterilized = sterilized
        self._dewormed = dewormed
        self._fee = fee
        self._photo = photo
        self._animal_type = animal_type

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

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

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


        :return: The id of this Pet.
        :rtype: int
        """
        return self._id

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


        :param id: The id of this Pet.
        :type id: int
        """

        self._id = id

    @property
    def adoption_speed(self) -> Category:
        """Gets the adoption_speed of this Pet.


        :return: The adoption_speed of this Pet.
        :rtype: Category
        """
        return self._adoption_speed

    @adoption_speed.setter
    def adoption_speed(self, adoption_speed: Category):
        """Sets the adoption_speed of this Pet.


        :param adoption_speed: The adoption_speed of this Pet.
        :type adoption_speed: Category
        """

        self._adoption_speed = adoption_speed

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


        :return: The name of this Pet.
        :rtype: str
        """
        return self._name

    @name.setter
    def name(self, name: str):
        """Sets the name of this Pet.


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

        self._name = name

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


        :return: The age of this Pet.
        :rtype: int
        """
        return self._age

    @age.setter
    def age(self, age: int):
        """Sets the age of this Pet.


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

        self._age = age

    @property
    def breed1(self) -> Breed:
        """Gets the breed1 of this Pet.


        :return: The breed1 of this Pet.
        :rtype: Breed
        """
        return self._breed1

    @breed1.setter
    def breed1(self, breed1: Breed):
        """Sets the breed1 of this Pet.


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

        self._breed1 = breed1

    @property
    def breed2(self) -> Breed:
        """Gets the breed2 of this Pet.


        :return: The breed2 of this Pet.
        :rtype: Breed
        """
        return self._breed2

    @breed2.setter
    def breed2(self, breed2: Breed):
        """Sets the breed2 of this Pet.


        :param breed2: The breed2 of this Pet.
        :type breed2: Breed
        """

        self._breed2 = breed2

    @property
    def gender(self) -> Gender:
        """Gets the gender of this Pet.


        :return: The gender of this Pet.
        :rtype: Gender
        """
        return self._gender

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


        :param gender: The gender of this Pet.
        :type gender: Gender
        """

        self._gender = gender

    @property
    def color1(self) -> Color:
        """Gets the color1 of this Pet.


        :return: The color1 of this Pet.
        :rtype: Color
        """
        return self._color1

    @color1.setter
    def color1(self, color1: Color):
        """Sets the color1 of this Pet.


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

        self._color1 = color1

    @property
    def color2(self) -> Color:
        """Gets the color2 of this Pet.


        :return: The color2 of this Pet.
        :rtype: Color
        """
        return self._color2

    @color2.setter
    def color2(self, color2: Color):
        """Sets the color2 of this Pet.


        :param color2: The color2 of this Pet.
        :type color2: Color
        """

        self._color2 = color2

    @property
    def color3(self) -> Color:
        """Gets the color3 of this Pet.


        :return: The color3 of this Pet.
        :rtype: Color
        """
        return self._color3

    @color3.setter
    def color3(self, color3: Color):
        """Sets the color3 of this Pet.


        :param color3: The color3 of this Pet.
        :type color3: Color
        """

        self._color3 = color3

    @property
    def maturity_size(self) -> MaturitySize:
        """Gets the maturity_size of this Pet.


        :return: The maturity_size of this Pet.
        :rtype: MaturitySize
        """
        return self._maturity_size

    @maturity_size.setter
    def maturity_size(self, maturity_size: MaturitySize):
        """Sets the maturity_size of this Pet.


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

        self._maturity_size = maturity_size

    @property
    def fur_length(self) -> FurLength:
        """Gets the fur_length of this Pet.


        :return: The fur_length of this Pet.
        :rtype: FurLength
        """
        return self._fur_length

    @fur_length.setter
    def fur_length(self, fur_length: FurLength):
        """Sets the fur_length of this Pet.


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

        self._fur_length = fur_length

    @property
    def vaccinated(self) -> Vaccinated:
        """Gets the vaccinated of this Pet.


        :return: The vaccinated of this Pet.
        :rtype: Vaccinated
        """
        return self._vaccinated

    @vaccinated.setter
    def vaccinated(self, vaccinated: Vaccinated):
        """Sets the vaccinated of this Pet.


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

        self._vaccinated = vaccinated

    @property
    def health(self) -> Health:
        """Gets the health of this Pet.


        :return: The health of this Pet.
        :rtype: Health
        """
        return self._health

    @health.setter
    def health(self, health: Health):
        """Sets the health of this Pet.


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

        self._health = health

    @property
    def sterilized(self) -> Sterilized:
        """Gets the sterilized of this Pet.


        :return: The sterilized of this Pet.
        :rtype: Sterilized
        """
        return self._sterilized

    @sterilized.setter
    def sterilized(self, sterilized: Sterilized):
        """Sets the sterilized of this Pet.


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

        self._sterilized = sterilized

    @property
    def dewormed(self) -> bool:
        """Gets the dewormed of this Pet.


        :return: The dewormed of this Pet.
        :rtype: bool
        """
        return self._dewormed

    @dewormed.setter
    def dewormed(self, dewormed: bool):
        """Sets the dewormed of this Pet.


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

        self._dewormed = dewormed

    @property
    def fee(self) -> float:
        """Gets the fee of this Pet.


        :return: The fee of this Pet.
        :rtype: float
        """
        return self._fee

    @fee.setter
    def fee(self, fee: float):
        """Sets the fee of this Pet.


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

        self._fee = fee

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


        :return: The photo of this Pet.
        :rtype: str
        """
        return self._photo

    @photo.setter
    def photo(self, photo: str):
        """Sets the photo of this Pet.


        :param photo: The photo of this Pet.
        :type photo: str
        """

        self._photo = photo

    @property
    def animal_type(self) -> Type:
        """Gets the animal_type of this Pet.


        :return: The animal_type of this Pet.
        :rtype: Type
        """
        return self._animal_type

    @animal_type.setter
    def animal_type(self, animal_type: Type):
        """Sets the animal_type of this Pet.


        :param animal_type: The animal_type of this Pet.
        :type animal_type: Type
        """

        self._animal_type = animal_type
