# coding: utf-8

"""
    The Enrichment List

    The THS enrichment list  # noqa: E501

    OpenAPI spec version: 1.0.0
    Contact: contactme@markwilkins.co
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""

import pprint
import re  # noqa: F401
from walklist_api_service.models import Animal
import six


class AnimalWithDailys(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 = {
        'a_number': 'int',
        'name': 'str',
        'active': 'bool',
        'origin': 'str',
        'breed': 'str',
        'has_training_plan': 'bool',
        'note': 'str',
        'next_assessment_due': 'datetime',
        'arrival': 'datetime',
        'created': 'datetime',
        'animal_type': 'AnimalType',
        'location': 'Location',
        'colour_code': 'ColourCode',
        'special_needs': 'list[SpecialNeed]',
        'active_enrichment_session': 'ActiveEnrichmentSession',
        'assessments': 'list[Assessment]',
        'groups': 'list[AnimalGroup]',
        'todays_enrichments': 'list[EnrichmentSession]',
        'todays_evaluations': 'list[Evaluation]'
    }
    if hasattr(Animal, "swagger_types"):
        swagger_types.update(Animal.swagger_types)

    attribute_map = {
        'a_number': 'aNumber',
        'name': 'name',
        'active': 'active',
        'origin': 'origin',
        'breed': 'breed',
        'has_training_plan': 'hasTrainingPlan',
        'note': 'note',
        'next_assessment_due': 'nextAssessmentDue',
        'arrival': 'arrival',
        'created': 'created',
        'animal_type': 'animalType',
        'location': 'location',
        'colour_code': 'colourCode',
        'special_needs': 'specialNeeds',
        'active_enrichment_session': 'activeEnrichmentSession',
        'assessments': 'assessments',
        'groups': 'groups',
        'todays_enrichments': 'todaysEnrichments',
        'todays_evaluations': 'todaysEvaluations'
    }
    if hasattr(Animal, "attribute_map"):
        attribute_map.update(Animal.attribute_map)

    def __init__(self, a_number=None, name=None, active=None, origin=None, breed=None, has_training_plan=None, note=None, next_assessment_due=None, arrival=None, created=None, animal_type=None, location=None, colour_code=None, special_needs=None, active_enrichment_session=None, assessments=None, groups=None, todays_enrichments=None, todays_evaluations=None, *args, **kwargs):  # noqa: E501
        """AnimalWithDailys - a model defined in Swagger"""  # noqa: E501
        self._a_number = None
        self._name = None
        self._active = None
        self._origin = None
        self._breed = None
        self._has_training_plan = None
        self._note = None
        self._next_assessment_due = None
        self._arrival = None
        self._created = None
        self._animal_type = None
        self._location = None
        self._colour_code = None
        self._special_needs = None
        self._active_enrichment_session = None
        self._assessments = None
        self._groups = None
        self._todays_enrichments = None
        self._todays_evaluations = None
        self.discriminator = None
        self.a_number = a_number
        self.name = name
        self.active = active
        if origin is not None:
            self.origin = origin
        if breed is not None:
            self.breed = breed
        self.has_training_plan = has_training_plan
        if note is not None:
            self.note = note
        if next_assessment_due is not None:
            self.next_assessment_due = next_assessment_due
        self.arrival = arrival
        self.created = created
        if animal_type is not None:
            self.animal_type = animal_type
        if location is not None:
            self.location = location
        if colour_code is not None:
            self.colour_code = colour_code
        if special_needs is not None:
            self.special_needs = special_needs
        if active_enrichment_session is not None:
            self.active_enrichment_session = active_enrichment_session
        if assessments is not None:
            self.assessments = assessments
        if groups is not None:
            self.groups = groups
        if todays_enrichments is not None:
            self.todays_enrichments = todays_enrichments
        if todays_evaluations is not None:
            self.todays_evaluations = todays_evaluations
        Animal.__init__(self, *args, **kwargs)

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


        :return: The a_number of this AnimalWithDailys.  # noqa: E501
        :rtype: int
        """
        return self._a_number

    @a_number.setter
    def a_number(self, a_number):
        """Sets the a_number of this AnimalWithDailys.


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

        self._a_number = a_number

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


        :return: The name of this AnimalWithDailys.  # noqa: E501
        :rtype: str
        """
        return self._name

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


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

        self._name = name

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


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

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


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

        self._active = active

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


        :return: The origin of this AnimalWithDailys.  # noqa: E501
        :rtype: str
        """
        return self._origin

    @origin.setter
    def origin(self, origin):
        """Sets the origin of this AnimalWithDailys.


        :param origin: The origin of this AnimalWithDailys.  # noqa: E501
        :type: str
        """

        self._origin = origin

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


        :return: The breed of this AnimalWithDailys.  # noqa: E501
        :rtype: str
        """
        return self._breed

    @breed.setter
    def breed(self, breed):
        """Sets the breed of this AnimalWithDailys.


        :param breed: The breed of this AnimalWithDailys.  # noqa: E501
        :type: str
        """

        self._breed = breed

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


        :return: The has_training_plan of this AnimalWithDailys.  # noqa: E501
        :rtype: bool
        """
        return self._has_training_plan

    @has_training_plan.setter
    def has_training_plan(self, has_training_plan):
        """Sets the has_training_plan of this AnimalWithDailys.


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

        self._has_training_plan = has_training_plan

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


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

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


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

        self._note = note

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


        :return: The next_assessment_due of this AnimalWithDailys.  # noqa: E501
        :rtype: datetime
        """
        return self._next_assessment_due

    @next_assessment_due.setter
    def next_assessment_due(self, next_assessment_due):
        """Sets the next_assessment_due of this AnimalWithDailys.


        :param next_assessment_due: The next_assessment_due of this AnimalWithDailys.  # noqa: E501
        :type: datetime
        """

        self._next_assessment_due = next_assessment_due

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


        :return: The arrival of this AnimalWithDailys.  # noqa: E501
        :rtype: datetime
        """
        return self._arrival

    @arrival.setter
    def arrival(self, arrival):
        """Sets the arrival of this AnimalWithDailys.


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

        self._arrival = arrival

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


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

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


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

        self._created = created

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


        :return: The animal_type of this AnimalWithDailys.  # noqa: E501
        :rtype: AnimalType
        """
        return self._animal_type

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


        :param animal_type: The animal_type of this AnimalWithDailys.  # noqa: E501
        :type: AnimalType
        """

        self._animal_type = animal_type

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


        :return: The location of this AnimalWithDailys.  # noqa: E501
        :rtype: Location
        """
        return self._location

    @location.setter
    def location(self, location):
        """Sets the location of this AnimalWithDailys.


        :param location: The location of this AnimalWithDailys.  # noqa: E501
        :type: Location
        """

        self._location = location

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


        :return: The colour_code of this AnimalWithDailys.  # noqa: E501
        :rtype: ColourCode
        """
        return self._colour_code

    @colour_code.setter
    def colour_code(self, colour_code):
        """Sets the colour_code of this AnimalWithDailys.


        :param colour_code: The colour_code of this AnimalWithDailys.  # noqa: E501
        :type: ColourCode
        """

        self._colour_code = colour_code

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


        :return: The special_needs of this AnimalWithDailys.  # noqa: E501
        :rtype: list[SpecialNeed]
        """
        return self._special_needs

    @special_needs.setter
    def special_needs(self, special_needs):
        """Sets the special_needs of this AnimalWithDailys.


        :param special_needs: The special_needs of this AnimalWithDailys.  # noqa: E501
        :type: list[SpecialNeed]
        """

        self._special_needs = special_needs

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


        :return: The active_enrichment_session of this AnimalWithDailys.  # noqa: E501
        :rtype: ActiveEnrichmentSession
        """
        return self._active_enrichment_session

    @active_enrichment_session.setter
    def active_enrichment_session(self, active_enrichment_session):
        """Sets the active_enrichment_session of this AnimalWithDailys.


        :param active_enrichment_session: The active_enrichment_session of this AnimalWithDailys.  # noqa: E501
        :type: ActiveEnrichmentSession
        """

        self._active_enrichment_session = active_enrichment_session

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


        :return: The assessments of this AnimalWithDailys.  # noqa: E501
        :rtype: list[Assessment]
        """
        return self._assessments

    @assessments.setter
    def assessments(self, assessments):
        """Sets the assessments of this AnimalWithDailys.


        :param assessments: The assessments of this AnimalWithDailys.  # noqa: E501
        :type: list[Assessment]
        """

        self._assessments = assessments

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


        :return: The groups of this AnimalWithDailys.  # noqa: E501
        :rtype: list[AnimalGroup]
        """
        return self._groups

    @groups.setter
    def groups(self, groups):
        """Sets the groups of this AnimalWithDailys.


        :param groups: The groups of this AnimalWithDailys.  # noqa: E501
        :type: list[AnimalGroup]
        """

        self._groups = groups

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


        :return: The todays_enrichments of this AnimalWithDailys.  # noqa: E501
        :rtype: list[EnrichmentSession]
        """
        return self._todays_enrichments

    @todays_enrichments.setter
    def todays_enrichments(self, todays_enrichments):
        """Sets the todays_enrichments of this AnimalWithDailys.


        :param todays_enrichments: The todays_enrichments of this AnimalWithDailys.  # noqa: E501
        :type: list[EnrichmentSession]
        """

        self._todays_enrichments = todays_enrichments

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


        :return: The todays_evaluations of this AnimalWithDailys.  # noqa: E501
        :rtype: list[Evaluation]
        """
        return self._todays_evaluations

    @todays_evaluations.setter
    def todays_evaluations(self, todays_evaluations):
        """Sets the todays_evaluations of this AnimalWithDailys.


        :param todays_evaluations: The todays_evaluations of this AnimalWithDailys.  # noqa: E501
        :type: list[Evaluation]
        """

        self._todays_evaluations = todays_evaluations

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

        return self.__dict__ == other.__dict__

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