# coding: utf-8

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

from typing import List, Dict  # noqa: F401

from properly_model_python.models.base_model_ import Model
from properly_model_python import util


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

    Do not edit the class manually.
    """

    def __init__(self, id: str=None, user_id: str=None, listing_favourites_id: str=None, favourites_id: str=None, favourites_type: str=None, created_at: int=None, modified_at: int=None, permission: str=None):  # noqa: E501
        """UserFavourites - a model defined in Swagger

        :param id: The id of this UserFavourites.  # noqa: E501
        :type id: str
        :param user_id: The user_id of this UserFavourites.  # noqa: E501
        :type user_id: str
        :param listing_favourites_id: The listing_favourites_id of this UserFavourites.  # noqa: E501
        :type listing_favourites_id: str
        :param favourites_id: The favourites_id of this UserFavourites.  # noqa: E501
        :type favourites_id: str
        :param favourites_type: The favourites_type of this UserFavourites.  # noqa: E501
        :type favourites_type: str
        :param created_at: The created_at of this UserFavourites.  # noqa: E501
        :type created_at: int
        :param modified_at: The modified_at of this UserFavourites.  # noqa: E501
        :type modified_at: int
        :param permission: The permission of this UserFavourites.  # noqa: E501
        :type permission: str
        """
        self.swagger_types = {
            'id': str,
            'user_id': str,
            'listing_favourites_id': str,
            'favourites_id': str,
            'favourites_type': str,
            'created_at': int,
            'modified_at': int,
            'permission': str
        }

        self.attribute_map = {
            'id': 'id',
            'user_id': 'userId',
            'listing_favourites_id': 'listingFavouritesId',
            'favourites_id': 'favouritesId',
            'favourites_type': 'favouritesType',
            'created_at': 'createdAt',
            'modified_at': 'modifiedAt',
            'permission': 'permission'
        }

        self._id = id
        self._user_id = user_id
        self._listing_favourites_id = listing_favourites_id
        self._favourites_id = favourites_id
        self._favourites_type = favourites_type
        self._created_at = created_at
        self._modified_at = modified_at
        self._permission = permission

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

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

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


        :return: The id of this UserFavourites.
        :rtype: str
        """
        return self._id

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


        :param id: The id of this UserFavourites.
        :type id: str
        """

        self._id = id

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


        :return: The user_id of this UserFavourites.
        :rtype: str
        """
        return self._user_id

    @user_id.setter
    def user_id(self, user_id: str):
        """Sets the user_id of this UserFavourites.


        :param user_id: The user_id of this UserFavourites.
        :type user_id: str
        """

        self._user_id = user_id

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


        :return: The listing_favourites_id of this UserFavourites.
        :rtype: str
        """
        return self._listing_favourites_id

    @listing_favourites_id.setter
    def listing_favourites_id(self, listing_favourites_id: str):
        """Sets the listing_favourites_id of this UserFavourites.


        :param listing_favourites_id: The listing_favourites_id of this UserFavourites.
        :type listing_favourites_id: str
        """

        self._listing_favourites_id = listing_favourites_id

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


        :return: The favourites_id of this UserFavourites.
        :rtype: str
        """
        return self._favourites_id

    @favourites_id.setter
    def favourites_id(self, favourites_id: str):
        """Sets the favourites_id of this UserFavourites.


        :param favourites_id: The favourites_id of this UserFavourites.
        :type favourites_id: str
        """

        self._favourites_id = favourites_id

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


        :return: The favourites_type of this UserFavourites.
        :rtype: str
        """
        return self._favourites_type

    @favourites_type.setter
    def favourites_type(self, favourites_type: str):
        """Sets the favourites_type of this UserFavourites.


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

        self._favourites_type = favourites_type

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


        :return: The created_at of this UserFavourites.
        :rtype: int
        """
        return self._created_at

    @created_at.setter
    def created_at(self, created_at: int):
        """Sets the created_at of this UserFavourites.


        :param created_at: The created_at of this UserFavourites.
        :type created_at: int
        """

        self._created_at = created_at

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


        :return: The modified_at of this UserFavourites.
        :rtype: int
        """
        return self._modified_at

    @modified_at.setter
    def modified_at(self, modified_at: int):
        """Sets the modified_at of this UserFavourites.


        :param modified_at: The modified_at of this UserFavourites.
        :type modified_at: int
        """

        self._modified_at = modified_at

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


        :return: The permission of this UserFavourites.
        :rtype: str
        """
        return self._permission

    @permission.setter
    def permission(self, permission: str):
        """Sets the permission of this UserFavourites.


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

        self._permission = permission
