# coding: utf-8

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

from typing import List, Dict  # noqa: F401

from activity_index_server.models.base_model_ import Model
from activity_index_server import util


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

    Do not edit the class manually.
    """

    def __init__(self, item_reviewed: object=None, review_count: int=None, rating_count: int=None, rating_value: float=None, best_rating: str=None, author: object=None, worst_rating: str=None, same_as: str=None, url: str=None, image: object=None, additional_type: str=None, name: str=None, identifier: str=None, potential_action: object=None, main_entity_of_page: str=None, description: str=None, disambiguating_description: str=None, alternate_name: str=None):  # noqa: E501
        """AggregateRating - a model defined in Swagger

        :param item_reviewed: The item_reviewed of this AggregateRating.  # noqa: E501
        :type item_reviewed: object
        :param review_count: The review_count of this AggregateRating.  # noqa: E501
        :type review_count: int
        :param rating_count: The rating_count of this AggregateRating.  # noqa: E501
        :type rating_count: int
        :param rating_value: The rating_value of this AggregateRating.  # noqa: E501
        :type rating_value: float
        :param best_rating: The best_rating of this AggregateRating.  # noqa: E501
        :type best_rating: str
        :param author: The author of this AggregateRating.  # noqa: E501
        :type author: object
        :param worst_rating: The worst_rating of this AggregateRating.  # noqa: E501
        :type worst_rating: str
        :param same_as: The same_as of this AggregateRating.  # noqa: E501
        :type same_as: str
        :param url: The url of this AggregateRating.  # noqa: E501
        :type url: str
        :param image: The image of this AggregateRating.  # noqa: E501
        :type image: object
        :param additional_type: The additional_type of this AggregateRating.  # noqa: E501
        :type additional_type: str
        :param name: The name of this AggregateRating.  # noqa: E501
        :type name: str
        :param identifier: The identifier of this AggregateRating.  # noqa: E501
        :type identifier: str
        :param potential_action: The potential_action of this AggregateRating.  # noqa: E501
        :type potential_action: object
        :param main_entity_of_page: The main_entity_of_page of this AggregateRating.  # noqa: E501
        :type main_entity_of_page: str
        :param description: The description of this AggregateRating.  # noqa: E501
        :type description: str
        :param disambiguating_description: The disambiguating_description of this AggregateRating.  # noqa: E501
        :type disambiguating_description: str
        :param alternate_name: The alternate_name of this AggregateRating.  # noqa: E501
        :type alternate_name: str
        """
        self.swagger_types = {
            'item_reviewed': object,
            'review_count': int,
            'rating_count': int,
            'rating_value': float,
            'best_rating': str,
            'author': object,
            'worst_rating': str,
            'same_as': str,
            'url': str,
            'image': object,
            'additional_type': str,
            'name': str,
            'identifier': str,
            'potential_action': object,
            'main_entity_of_page': str,
            'description': str,
            'disambiguating_description': str,
            'alternate_name': str
        }

        self.attribute_map = {
            'item_reviewed': 'itemReviewed',
            'review_count': 'reviewCount',
            'rating_count': 'ratingCount',
            'rating_value': 'ratingValue',
            'best_rating': 'bestRating',
            'author': 'author',
            'worst_rating': 'worstRating',
            'same_as': 'sameAs',
            'url': 'url',
            'image': 'image',
            'additional_type': 'additionalType',
            'name': 'name',
            'identifier': 'identifier',
            'potential_action': 'potentialAction',
            'main_entity_of_page': 'mainEntityOfPage',
            'description': 'description',
            'disambiguating_description': 'disambiguatingDescription',
            'alternate_name': 'alternateName'
        }

        self._item_reviewed = item_reviewed
        self._review_count = review_count
        self._rating_count = rating_count
        self._rating_value = rating_value
        self._best_rating = best_rating
        self._author = author
        self._worst_rating = worst_rating
        self._same_as = same_as
        self._url = url
        self._image = image
        self._additional_type = additional_type
        self._name = name
        self._identifier = identifier
        self._potential_action = potential_action
        self._main_entity_of_page = main_entity_of_page
        self._description = description
        self._disambiguating_description = disambiguating_description
        self._alternate_name = alternate_name

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

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

    @property
    def item_reviewed(self) -> object:
        """Gets the item_reviewed of this AggregateRating.

        The item that is being reviewed/rated.  # noqa: E501

        :return: The item_reviewed of this AggregateRating.
        :rtype: object
        """
        return self._item_reviewed

    @item_reviewed.setter
    def item_reviewed(self, item_reviewed: object):
        """Sets the item_reviewed of this AggregateRating.

        The item that is being reviewed/rated.  # noqa: E501

        :param item_reviewed: The item_reviewed of this AggregateRating.
        :type item_reviewed: object
        """

        self._item_reviewed = item_reviewed

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

        The count of total number of reviews.  # noqa: E501

        :return: The review_count of this AggregateRating.
        :rtype: int
        """
        return self._review_count

    @review_count.setter
    def review_count(self, review_count: int):
        """Sets the review_count of this AggregateRating.

        The count of total number of reviews.  # noqa: E501

        :param review_count: The review_count of this AggregateRating.
        :type review_count: int
        """

        self._review_count = review_count

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

        The count of total number of ratings.  # noqa: E501

        :return: The rating_count of this AggregateRating.
        :rtype: int
        """
        return self._rating_count

    @rating_count.setter
    def rating_count(self, rating_count: int):
        """Sets the rating_count of this AggregateRating.

        The count of total number of ratings.  # noqa: E501

        :param rating_count: The rating_count of this AggregateRating.
        :type rating_count: int
        """

        self._rating_count = rating_count

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

        The rating for the content.  # noqa: E501

        :return: The rating_value of this AggregateRating.
        :rtype: float
        """
        return self._rating_value

    @rating_value.setter
    def rating_value(self, rating_value: float):
        """Sets the rating_value of this AggregateRating.

        The rating for the content.  # noqa: E501

        :param rating_value: The rating_value of this AggregateRating.
        :type rating_value: float
        """

        self._rating_value = rating_value

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

        The highest value allowed in this rating system. If bestRating is omitted, 5 is assumed.  # noqa: E501

        :return: The best_rating of this AggregateRating.
        :rtype: str
        """
        return self._best_rating

    @best_rating.setter
    def best_rating(self, best_rating: str):
        """Sets the best_rating of this AggregateRating.

        The highest value allowed in this rating system. If bestRating is omitted, 5 is assumed.  # noqa: E501

        :param best_rating: The best_rating of this AggregateRating.
        :type best_rating: str
        """

        self._best_rating = best_rating

    @property
    def author(self) -> object:
        """Gets the author of this AggregateRating.

        The author of this content or rating. Please note that author is special in that HTML 5 provides a special mechanism for indicating authorship via the rel tag. That is equivalent to this and may be used interchangeably.  # noqa: E501

        :return: The author of this AggregateRating.
        :rtype: object
        """
        return self._author

    @author.setter
    def author(self, author: object):
        """Sets the author of this AggregateRating.

        The author of this content or rating. Please note that author is special in that HTML 5 provides a special mechanism for indicating authorship via the rel tag. That is equivalent to this and may be used interchangeably.  # noqa: E501

        :param author: The author of this AggregateRating.
        :type author: object
        """

        self._author = author

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

        The lowest value allowed in this rating system. If worstRating is omitted, 1 is assumed.  # noqa: E501

        :return: The worst_rating of this AggregateRating.
        :rtype: str
        """
        return self._worst_rating

    @worst_rating.setter
    def worst_rating(self, worst_rating: str):
        """Sets the worst_rating of this AggregateRating.

        The lowest value allowed in this rating system. If worstRating is omitted, 1 is assumed.  # noqa: E501

        :param worst_rating: The worst_rating of this AggregateRating.
        :type worst_rating: str
        """

        self._worst_rating = worst_rating

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

        URL of a reference Web page that unambiguously indicates the item s identity. E.g. the URL of the item s Wikipedia page, Wikidata entry, or official website.  # noqa: E501

        :return: The same_as of this AggregateRating.
        :rtype: str
        """
        return self._same_as

    @same_as.setter
    def same_as(self, same_as: str):
        """Sets the same_as of this AggregateRating.

        URL of a reference Web page that unambiguously indicates the item s identity. E.g. the URL of the item s Wikipedia page, Wikidata entry, or official website.  # noqa: E501

        :param same_as: The same_as of this AggregateRating.
        :type same_as: str
        """

        self._same_as = same_as

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

        URL of the item.  # noqa: E501

        :return: The url of this AggregateRating.
        :rtype: str
        """
        return self._url

    @url.setter
    def url(self, url: str):
        """Sets the url of this AggregateRating.

        URL of the item.  # noqa: E501

        :param url: The url of this AggregateRating.
        :type url: str
        """

        self._url = url

    @property
    def image(self) -> object:
        """Gets the image of this AggregateRating.

        An image of the item. This can be a URL or a fully described ImageObject.  # noqa: E501

        :return: The image of this AggregateRating.
        :rtype: object
        """
        return self._image

    @image.setter
    def image(self, image: object):
        """Sets the image of this AggregateRating.

        An image of the item. This can be a URL or a fully described ImageObject.  # noqa: E501

        :param image: The image of this AggregateRating.
        :type image: object
        """

        self._image = image

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

        An additional type for the item, typically used for adding more specific types from external vocabularies in microdata syntax. This is a relationship between something and a class that the thing is in. In RDFa syntax, it is better to use the native RDFa syntax - the  typeof  attribute - for multiple types. Schema.org tools may have only weaker understanding of extra types, in particular those defined externally.  # noqa: E501

        :return: The additional_type of this AggregateRating.
        :rtype: str
        """
        return self._additional_type

    @additional_type.setter
    def additional_type(self, additional_type: str):
        """Sets the additional_type of this AggregateRating.

        An additional type for the item, typically used for adding more specific types from external vocabularies in microdata syntax. This is a relationship between something and a class that the thing is in. In RDFa syntax, it is better to use the native RDFa syntax - the  typeof  attribute - for multiple types. Schema.org tools may have only weaker understanding of extra types, in particular those defined externally.  # noqa: E501

        :param additional_type: The additional_type of this AggregateRating.
        :type additional_type: str
        """

        self._additional_type = additional_type

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

        The name of the item.  # noqa: E501

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

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

        The name of the item.  # noqa: E501

        :param name: The name of this AggregateRating.
        :type name: str
        """

        self._name = name

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

        The identifier property represents any kind of identifier for any kind of Thing, such as ISBNs, GTIN codes, UUIDs etc. Schema.org provides dedicated properties for representing many of these, either as textual strings or as URL (URI) links. See background notes for more details.  # noqa: E501

        :return: The identifier of this AggregateRating.
        :rtype: str
        """
        return self._identifier

    @identifier.setter
    def identifier(self, identifier: str):
        """Sets the identifier of this AggregateRating.

        The identifier property represents any kind of identifier for any kind of Thing, such as ISBNs, GTIN codes, UUIDs etc. Schema.org provides dedicated properties for representing many of these, either as textual strings or as URL (URI) links. See background notes for more details.  # noqa: E501

        :param identifier: The identifier of this AggregateRating.
        :type identifier: str
        """

        self._identifier = identifier

    @property
    def potential_action(self) -> object:
        """Gets the potential_action of this AggregateRating.

        Indicates a potential Action, which describes an idealized action in which this thing would play an  object  role.  # noqa: E501

        :return: The potential_action of this AggregateRating.
        :rtype: object
        """
        return self._potential_action

    @potential_action.setter
    def potential_action(self, potential_action: object):
        """Sets the potential_action of this AggregateRating.

        Indicates a potential Action, which describes an idealized action in which this thing would play an  object  role.  # noqa: E501

        :param potential_action: The potential_action of this AggregateRating.
        :type potential_action: object
        """

        self._potential_action = potential_action

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

        Indicates a page (or other CreativeWork) for which this thing is the main entity being described. See background notes for details.  # noqa: E501

        :return: The main_entity_of_page of this AggregateRating.
        :rtype: str
        """
        return self._main_entity_of_page

    @main_entity_of_page.setter
    def main_entity_of_page(self, main_entity_of_page: str):
        """Sets the main_entity_of_page of this AggregateRating.

        Indicates a page (or other CreativeWork) for which this thing is the main entity being described. See background notes for details.  # noqa: E501

        :param main_entity_of_page: The main_entity_of_page of this AggregateRating.
        :type main_entity_of_page: str
        """

        self._main_entity_of_page = main_entity_of_page

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

        A description of the item.  # noqa: E501

        :return: The description of this AggregateRating.
        :rtype: str
        """
        return self._description

    @description.setter
    def description(self, description: str):
        """Sets the description of this AggregateRating.

        A description of the item.  # noqa: E501

        :param description: The description of this AggregateRating.
        :type description: str
        """

        self._description = description

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

        A sub property of description. A short description of the item used to disambiguate from other, similar items. Information from other properties (in particular, name) may be necessary for the description to be useful for disambiguation.  # noqa: E501

        :return: The disambiguating_description of this AggregateRating.
        :rtype: str
        """
        return self._disambiguating_description

    @disambiguating_description.setter
    def disambiguating_description(self, disambiguating_description: str):
        """Sets the disambiguating_description of this AggregateRating.

        A sub property of description. A short description of the item used to disambiguate from other, similar items. Information from other properties (in particular, name) may be necessary for the description to be useful for disambiguation.  # noqa: E501

        :param disambiguating_description: The disambiguating_description of this AggregateRating.
        :type disambiguating_description: str
        """

        self._disambiguating_description = disambiguating_description

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

        An alias for the item.  # noqa: E501

        :return: The alternate_name of this AggregateRating.
        :rtype: str
        """
        return self._alternate_name

    @alternate_name.setter
    def alternate_name(self, alternate_name: str):
        """Sets the alternate_name of this AggregateRating.

        An alias for the item.  # noqa: E501

        :param alternate_name: The alternate_name of this AggregateRating.
        :type alternate_name: str
        """

        self._alternate_name = alternate_name
