# coding: utf-8

"""
    farm API

    farm API documentation  # noqa: E501

    OpenAPI spec version: 0.0.1
    
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""

import pprint
import re  # noqa: F401

import six

class Schedule(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 = {
        'client_id': 'str',
        'data': 'dict(str, object)',
        'deleted': 'bool',
        'execute_when': 'str',
        'fixed_date': 'bool',
        'fixed_execution_date': 'datetime',
        'fixed_execution_dates': 'list[ZonedDateTime]',
        'has_recuring_end_date': 'bool',
        'id': 'int',
        'no_of_days': 'int',
        'rec_execute_when': 'str',
        'rec_no_of_days': 'int',
        'rec_reference_date': 'str',
        'recuring': 'bool',
        'recuring_end_date': 'datetime',
        'reference_date': 'str',
        'reference_plan_id': 'int',
        'repeats': 'int',
        'required_days': 'int',
        'time_period': 'str',
        'type': 'str'
    }

    attribute_map = {
        'client_id': 'clientId',
        'data': 'data',
        'deleted': 'deleted',
        'execute_when': 'executeWhen',
        'fixed_date': 'fixedDate',
        'fixed_execution_date': 'fixedExecutionDate',
        'fixed_execution_dates': 'fixedExecutionDates',
        'has_recuring_end_date': 'hasRecuringEndDate',
        'id': 'id',
        'no_of_days': 'noOfDays',
        'rec_execute_when': 'recExecuteWhen',
        'rec_no_of_days': 'recNoOfDays',
        'rec_reference_date': 'recReferenceDate',
        'recuring': 'recuring',
        'recuring_end_date': 'recuringEndDate',
        'reference_date': 'referenceDate',
        'reference_plan_id': 'referencePlanId',
        'repeats': 'repeats',
        'required_days': 'requiredDays',
        'time_period': 'timePeriod',
        'type': 'type'
    }

    def __init__(self, client_id=None, data=None, deleted=None, execute_when=None, fixed_date=None, fixed_execution_date=None, fixed_execution_dates=None, has_recuring_end_date=None, id=None, no_of_days=None, rec_execute_when=None, rec_no_of_days=None, rec_reference_date=None, recuring=None, recuring_end_date=None, reference_date=None, reference_plan_id=None, repeats=None, required_days=None, time_period=None, type=None):  # noqa: E501
        """Schedule - a model defined in Swagger"""  # noqa: E501
        self._client_id = None
        self._data = None
        self._deleted = None
        self._execute_when = None
        self._fixed_date = None
        self._fixed_execution_date = None
        self._fixed_execution_dates = None
        self._has_recuring_end_date = None
        self._id = None
        self._no_of_days = None
        self._rec_execute_when = None
        self._rec_no_of_days = None
        self._rec_reference_date = None
        self._recuring = None
        self._recuring_end_date = None
        self._reference_date = None
        self._reference_plan_id = None
        self._repeats = None
        self._required_days = None
        self._time_period = None
        self._type = None
        self.discriminator = None
        if client_id is not None:
            self.client_id = client_id
        if data is not None:
            self.data = data
        if deleted is not None:
            self.deleted = deleted
        if execute_when is not None:
            self.execute_when = execute_when
        if fixed_date is not None:
            self.fixed_date = fixed_date
        if fixed_execution_date is not None:
            self.fixed_execution_date = fixed_execution_date
        if fixed_execution_dates is not None:
            self.fixed_execution_dates = fixed_execution_dates
        if has_recuring_end_date is not None:
            self.has_recuring_end_date = has_recuring_end_date
        if id is not None:
            self.id = id
        if no_of_days is not None:
            self.no_of_days = no_of_days
        if rec_execute_when is not None:
            self.rec_execute_when = rec_execute_when
        if rec_no_of_days is not None:
            self.rec_no_of_days = rec_no_of_days
        if rec_reference_date is not None:
            self.rec_reference_date = rec_reference_date
        if recuring is not None:
            self.recuring = recuring
        if recuring_end_date is not None:
            self.recuring_end_date = recuring_end_date
        if reference_date is not None:
            self.reference_date = reference_date
        if reference_plan_id is not None:
            self.reference_plan_id = reference_plan_id
        if repeats is not None:
            self.repeats = repeats
        if required_days is not None:
            self.required_days = required_days
        if time_period is not None:
            self.time_period = time_period
        if type is not None:
            self.type = type

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


        :return: The client_id of this Schedule.  # noqa: E501
        :rtype: str
        """
        return self._client_id

    @client_id.setter
    def client_id(self, client_id):
        """Sets the client_id of this Schedule.


        :param client_id: The client_id of this Schedule.  # noqa: E501
        :type: str
        """

        self._client_id = client_id

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


        :return: The data of this Schedule.  # noqa: E501
        :rtype: dict(str, object)
        """
        return self._data

    @data.setter
    def data(self, data):
        """Sets the data of this Schedule.


        :param data: The data of this Schedule.  # noqa: E501
        :type: dict(str, object)
        """

        self._data = data

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


        :return: The deleted of this Schedule.  # noqa: E501
        :rtype: bool
        """
        return self._deleted

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


        :param deleted: The deleted of this Schedule.  # noqa: E501
        :type: bool
        """

        self._deleted = deleted

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


        :return: The execute_when of this Schedule.  # noqa: E501
        :rtype: str
        """
        return self._execute_when

    @execute_when.setter
    def execute_when(self, execute_when):
        """Sets the execute_when of this Schedule.


        :param execute_when: The execute_when of this Schedule.  # noqa: E501
        :type: str
        """

        self._execute_when = execute_when

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


        :return: The fixed_date of this Schedule.  # noqa: E501
        :rtype: bool
        """
        return self._fixed_date

    @fixed_date.setter
    def fixed_date(self, fixed_date):
        """Sets the fixed_date of this Schedule.


        :param fixed_date: The fixed_date of this Schedule.  # noqa: E501
        :type: bool
        """

        self._fixed_date = fixed_date

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


        :return: The fixed_execution_date of this Schedule.  # noqa: E501
        :rtype: datetime
        """
        return self._fixed_execution_date

    @fixed_execution_date.setter
    def fixed_execution_date(self, fixed_execution_date):
        """Sets the fixed_execution_date of this Schedule.


        :param fixed_execution_date: The fixed_execution_date of this Schedule.  # noqa: E501
        :type: datetime
        """

        self._fixed_execution_date = fixed_execution_date

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


        :return: The fixed_execution_dates of this Schedule.  # noqa: E501
        :rtype: list[ZonedDateTime]
        """
        return self._fixed_execution_dates

    @fixed_execution_dates.setter
    def fixed_execution_dates(self, fixed_execution_dates):
        """Sets the fixed_execution_dates of this Schedule.


        :param fixed_execution_dates: The fixed_execution_dates of this Schedule.  # noqa: E501
        :type: list[ZonedDateTime]
        """

        self._fixed_execution_dates = fixed_execution_dates

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


        :return: The has_recuring_end_date of this Schedule.  # noqa: E501
        :rtype: bool
        """
        return self._has_recuring_end_date

    @has_recuring_end_date.setter
    def has_recuring_end_date(self, has_recuring_end_date):
        """Sets the has_recuring_end_date of this Schedule.


        :param has_recuring_end_date: The has_recuring_end_date of this Schedule.  # noqa: E501
        :type: bool
        """

        self._has_recuring_end_date = has_recuring_end_date

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


        :return: The id of this Schedule.  # noqa: E501
        :rtype: int
        """
        return self._id

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


        :param id: The id of this Schedule.  # noqa: E501
        :type: int
        """

        self._id = id

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


        :return: The no_of_days of this Schedule.  # noqa: E501
        :rtype: int
        """
        return self._no_of_days

    @no_of_days.setter
    def no_of_days(self, no_of_days):
        """Sets the no_of_days of this Schedule.


        :param no_of_days: The no_of_days of this Schedule.  # noqa: E501
        :type: int
        """

        self._no_of_days = no_of_days

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


        :return: The rec_execute_when of this Schedule.  # noqa: E501
        :rtype: str
        """
        return self._rec_execute_when

    @rec_execute_when.setter
    def rec_execute_when(self, rec_execute_when):
        """Sets the rec_execute_when of this Schedule.


        :param rec_execute_when: The rec_execute_when of this Schedule.  # noqa: E501
        :type: str
        """

        self._rec_execute_when = rec_execute_when

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


        :return: The rec_no_of_days of this Schedule.  # noqa: E501
        :rtype: int
        """
        return self._rec_no_of_days

    @rec_no_of_days.setter
    def rec_no_of_days(self, rec_no_of_days):
        """Sets the rec_no_of_days of this Schedule.


        :param rec_no_of_days: The rec_no_of_days of this Schedule.  # noqa: E501
        :type: int
        """

        self._rec_no_of_days = rec_no_of_days

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


        :return: The rec_reference_date of this Schedule.  # noqa: E501
        :rtype: str
        """
        return self._rec_reference_date

    @rec_reference_date.setter
    def rec_reference_date(self, rec_reference_date):
        """Sets the rec_reference_date of this Schedule.


        :param rec_reference_date: The rec_reference_date of this Schedule.  # noqa: E501
        :type: str
        """

        self._rec_reference_date = rec_reference_date

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


        :return: The recuring of this Schedule.  # noqa: E501
        :rtype: bool
        """
        return self._recuring

    @recuring.setter
    def recuring(self, recuring):
        """Sets the recuring of this Schedule.


        :param recuring: The recuring of this Schedule.  # noqa: E501
        :type: bool
        """

        self._recuring = recuring

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


        :return: The recuring_end_date of this Schedule.  # noqa: E501
        :rtype: datetime
        """
        return self._recuring_end_date

    @recuring_end_date.setter
    def recuring_end_date(self, recuring_end_date):
        """Sets the recuring_end_date of this Schedule.


        :param recuring_end_date: The recuring_end_date of this Schedule.  # noqa: E501
        :type: datetime
        """

        self._recuring_end_date = recuring_end_date

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


        :return: The reference_date of this Schedule.  # noqa: E501
        :rtype: str
        """
        return self._reference_date

    @reference_date.setter
    def reference_date(self, reference_date):
        """Sets the reference_date of this Schedule.


        :param reference_date: The reference_date of this Schedule.  # noqa: E501
        :type: str
        """

        self._reference_date = reference_date

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


        :return: The reference_plan_id of this Schedule.  # noqa: E501
        :rtype: int
        """
        return self._reference_plan_id

    @reference_plan_id.setter
    def reference_plan_id(self, reference_plan_id):
        """Sets the reference_plan_id of this Schedule.


        :param reference_plan_id: The reference_plan_id of this Schedule.  # noqa: E501
        :type: int
        """

        self._reference_plan_id = reference_plan_id

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


        :return: The repeats of this Schedule.  # noqa: E501
        :rtype: int
        """
        return self._repeats

    @repeats.setter
    def repeats(self, repeats):
        """Sets the repeats of this Schedule.


        :param repeats: The repeats of this Schedule.  # noqa: E501
        :type: int
        """

        self._repeats = repeats

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


        :return: The required_days of this Schedule.  # noqa: E501
        :rtype: int
        """
        return self._required_days

    @required_days.setter
    def required_days(self, required_days):
        """Sets the required_days of this Schedule.


        :param required_days: The required_days of this Schedule.  # noqa: E501
        :type: int
        """

        self._required_days = required_days

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


        :return: The time_period of this Schedule.  # noqa: E501
        :rtype: str
        """
        return self._time_period

    @time_period.setter
    def time_period(self, time_period):
        """Sets the time_period of this Schedule.


        :param time_period: The time_period of this Schedule.  # noqa: E501
        :type: str
        """

        self._time_period = time_period

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


        :return: The type of this Schedule.  # noqa: E501
        :rtype: str
        """
        return self._type

    @type.setter
    def type(self, type):
        """Sets the type of this Schedule.


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

        self._type = type

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

        return self.__dict__ == other.__dict__

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