# coding: utf-8

"""
    The Selling Partner API for CustomerFeedback

    The Selling Partner API for Customer Feedback (Customer Feedback API) provides information about customer reviews and returns at both the item and browse node level.

    The version of the OpenAPI document: 2024-06-01
    Generated by OpenAPI Generator (https://openapi-generator.tech)

    Do not edit the class manually.
"""  # noqa: E501


import pprint
import re  # noqa: F401

import six

from spapi.configuration import Configuration


class ItemReviewTopic(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 = {
        'topic': 'str',
        'asin_metrics': 'ItemReviewTopicMetrics',
        'parent_asin_metrics': 'ItemReviewTopicMetrics',
        'browse_node_metrics': 'ItemReviewBrowseNodeMetrics',
        'child_asin_metrics': 'ChildAsinMetrics',
        'review_snippets': 'List[str]',
        'subtopics': 'List[ItemReviewSubtopic]',
    }

    attribute_map = {
        'topic': 'topic',
        'asin_metrics': 'asinMetrics',
        'parent_asin_metrics': 'parentAsinMetrics',
        'browse_node_metrics': 'browseNodeMetrics',
        'child_asin_metrics': 'childAsinMetrics',
        'review_snippets': 'reviewSnippets',
        'subtopics': 'subtopics',
    }

    def __init__(self, topic=None, asin_metrics=None, parent_asin_metrics=None, browse_node_metrics=None, child_asin_metrics=None, review_snippets=None, subtopics=None, _configuration=None):  # noqa: E501
        """ItemReviewTopic - a model defined in Swagger"""  # noqa: E501
        if _configuration is None:
            _configuration = Configuration()
        self._configuration = _configuration

        self._topic = None
        self._asin_metrics = None
        self._parent_asin_metrics = None
        self._browse_node_metrics = None
        self._child_asin_metrics = None
        self._review_snippets = None
        self._subtopics = None
        self.discriminator = None

        self.topic = topic
        self.asin_metrics = asin_metrics
        if parent_asin_metrics is not None:
            self.parent_asin_metrics = parent_asin_metrics
        if browse_node_metrics is not None:
            self.browse_node_metrics = browse_node_metrics
        if child_asin_metrics is not None:
            self.child_asin_metrics = child_asin_metrics
        if review_snippets is not None:
            self.review_snippets = review_snippets
        if subtopics is not None:
            self.subtopics = subtopics

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

        The name of the item review topic.  # noqa: E501

        :return: The topic of this ItemReviewTopic.  # noqa: E501
        :rtype: str
        """
        return self._topic

    @topic.setter
    def topic(self, topic):
        """Sets the topic of this ItemReviewTopic.

        The name of the item review topic.  # noqa: E501

        :param topic: The topic of this ItemReviewTopic.  # noqa: E501
        :type: str
        """
        if self._configuration.client_side_validation and topic is None:
            raise ValueError("Invalid value for `topic`, must not be `None`")  # noqa: E501

        self._topic = topic

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


        :return: The asin_metrics of this ItemReviewTopic.  # noqa: E501
        :rtype: ItemReviewTopicMetrics
        """
        return self._asin_metrics

    @asin_metrics.setter
    def asin_metrics(self, asin_metrics):
        """Sets the asin_metrics of this ItemReviewTopic.


        :param asin_metrics: The asin_metrics of this ItemReviewTopic.  # noqa: E501
        :type: ItemReviewTopicMetrics
        """
        if self._configuration.client_side_validation and asin_metrics is None:
            raise ValueError("Invalid value for `asin_metrics`, must not be `None`")  # noqa: E501

        self._asin_metrics = asin_metrics

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


        :return: The parent_asin_metrics of this ItemReviewTopic.  # noqa: E501
        :rtype: ItemReviewTopicMetrics
        """
        return self._parent_asin_metrics

    @parent_asin_metrics.setter
    def parent_asin_metrics(self, parent_asin_metrics):
        """Sets the parent_asin_metrics of this ItemReviewTopic.


        :param parent_asin_metrics: The parent_asin_metrics of this ItemReviewTopic.  # noqa: E501
        :type: ItemReviewTopicMetrics
        """

        self._parent_asin_metrics = parent_asin_metrics

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


        :return: The browse_node_metrics of this ItemReviewTopic.  # noqa: E501
        :rtype: ItemReviewBrowseNodeMetrics
        """
        return self._browse_node_metrics

    @browse_node_metrics.setter
    def browse_node_metrics(self, browse_node_metrics):
        """Sets the browse_node_metrics of this ItemReviewTopic.


        :param browse_node_metrics: The browse_node_metrics of this ItemReviewTopic.  # noqa: E501
        :type: ItemReviewBrowseNodeMetrics
        """

        self._browse_node_metrics = browse_node_metrics

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


        :return: The child_asin_metrics of this ItemReviewTopic.  # noqa: E501
        :rtype: ChildAsinMetrics
        """
        return self._child_asin_metrics

    @child_asin_metrics.setter
    def child_asin_metrics(self, child_asin_metrics):
        """Sets the child_asin_metrics of this ItemReviewTopic.


        :param child_asin_metrics: The child_asin_metrics of this ItemReviewTopic.  # noqa: E501
        :type: ChildAsinMetrics
        """

        self._child_asin_metrics = child_asin_metrics

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

        A list of up to three snippets from reviews that contain the topic. This value is `null` if there aren't enough review snippets for the topic.  # noqa: E501

        :return: The review_snippets of this ItemReviewTopic.  # noqa: E501
        :rtype: List[str]
        """
        return self._review_snippets

    @review_snippets.setter
    def review_snippets(self, review_snippets):
        """Sets the review_snippets of this ItemReviewTopic.

        A list of up to three snippets from reviews that contain the topic. This value is `null` if there aren't enough review snippets for the topic.  # noqa: E501

        :param review_snippets: The review_snippets of this ItemReviewTopic.  # noqa: E501
        :type: List[str]
        """
        if (self._configuration.client_side_validation and
                review_snippets is not None and len(review_snippets) > 3):
            raise ValueError("Invalid value for `review_snippets`, number of items must be less than or equal to `3`")  # noqa: E501

        self._review_snippets = review_snippets

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

        A list of up to five top subtopics for the topic. The percentage of customer reviews that mention the subtopic determine the topic's placement in the list. This value is `null` if there are no subtopics.  # noqa: E501

        :return: The subtopics of this ItemReviewTopic.  # noqa: E501
        :rtype: List[ItemReviewSubtopic]
        """
        return self._subtopics

    @subtopics.setter
    def subtopics(self, subtopics):
        """Sets the subtopics of this ItemReviewTopic.

        A list of up to five top subtopics for the topic. The percentage of customer reviews that mention the subtopic determine the topic's placement in the list. This value is `null` if there are no subtopics.  # noqa: E501

        :param subtopics: The subtopics of this ItemReviewTopic.  # noqa: E501
        :type: List[ItemReviewSubtopic]
        """
        if (self._configuration.client_side_validation and
                subtopics is not None and len(subtopics) > 5):
            raise ValueError("Invalid value for `subtopics`, number of items must be less than or equal to `5`")  # noqa: E501

        self._subtopics = subtopics

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

        return self.to_dict() == other.to_dict()

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

        return self.to_dict() != other.to_dict()
