# 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 ListingFavouritesAuditLog(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, listing_favourites_id: str=None, property_id: str=None, user_id: str=None, created_at: int=None, permission: str=None, operation: str=None, listing_id: str=None):  # noqa: E501
        """ListingFavouritesAuditLog - a model defined in Swagger

        :param id: The id of this ListingFavouritesAuditLog.  # noqa: E501
        :type id: str
        :param listing_favourites_id: The listing_favourites_id of this ListingFavouritesAuditLog.  # noqa: E501
        :type listing_favourites_id: str
        :param property_id: The property_id of this ListingFavouritesAuditLog.  # noqa: E501
        :type property_id: str
        :param user_id: The user_id of this ListingFavouritesAuditLog.  # noqa: E501
        :type user_id: str
        :param created_at: The created_at of this ListingFavouritesAuditLog.  # noqa: E501
        :type created_at: int
        :param permission: The permission of this ListingFavouritesAuditLog.  # noqa: E501
        :type permission: str
        :param operation: The operation of this ListingFavouritesAuditLog.  # noqa: E501
        :type operation: str
        :param listing_id: The listing_id of this ListingFavouritesAuditLog.  # noqa: E501
        :type listing_id: str
        """
        self.swagger_types = {
            'id': str,
            'listing_favourites_id': str,
            'property_id': str,
            'user_id': str,
            'created_at': int,
            'permission': str,
            'operation': str,
            'listing_id': str
        }

        self.attribute_map = {
            'id': 'id',
            'listing_favourites_id': 'listingFavouritesId',
            'property_id': 'propertyId',
            'user_id': 'userId',
            'created_at': 'createdAt',
            'permission': 'permission',
            'operation': 'operation',
            'listing_id': 'listingId'
        }

        self._id = id
        self._listing_favourites_id = listing_favourites_id
        self._property_id = property_id
        self._user_id = user_id
        self._created_at = created_at
        self._permission = permission
        self._operation = operation
        self._listing_id = listing_id

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

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

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


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

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


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

        self._id = id

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


        :return: The listing_favourites_id of this ListingFavouritesAuditLog.
        :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 ListingFavouritesAuditLog.


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

        self._listing_favourites_id = listing_favourites_id

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


        :return: The property_id of this ListingFavouritesAuditLog.
        :rtype: str
        """
        return self._property_id

    @property_id.setter
    def property_id(self, property_id: str):
        """Sets the property_id of this ListingFavouritesAuditLog.


        :param property_id: The property_id of this ListingFavouritesAuditLog.
        :type property_id: str
        """

        self._property_id = property_id

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


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

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


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

        self._user_id = user_id

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


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

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


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

        self._created_at = created_at

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


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

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


        :param permission: The permission of this ListingFavouritesAuditLog.
        :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

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


        :return: The operation of this ListingFavouritesAuditLog.
        :rtype: str
        """
        return self._operation

    @operation.setter
    def operation(self, operation: str):
        """Sets the operation of this ListingFavouritesAuditLog.


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

        self._operation = operation

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


        :return: The listing_id of this ListingFavouritesAuditLog.
        :rtype: str
        """
        return self._listing_id

    @listing_id.setter
    def listing_id(self, listing_id: str):
        """Sets the listing_id of this ListingFavouritesAuditLog.


        :param listing_id: The listing_id of this ListingFavouritesAuditLog.
        :type listing_id: str
        """

        self._listing_id = listing_id
