# coding: utf-8

"""
  Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.

  Licensed under the Apache License, Version 2.0 (the "License").
  You may not use this file except in compliance with the License.
  A copy of the License is located at

      http://www.apache.org/licenses/LICENSE-2.0

  or in the "license" file accompanying this file. This file is distributed
  on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
  express or implied. See the License for the specific language governing
  permissions and limitations under the License.
"""


"""
    ProductAdvertisingAPI

    https://webservices.amazon.com/paapi5/documentation/index.html  # noqa: E501
"""


import pprint
import re  # noqa: F401

import six

from .condition import Condition  # noqa: F401,E501
from .get_variations_resource import GetVariationsResource  # noqa: F401,E501
from .merchant import Merchant  # noqa: F401,E501
from .offer_count import OfferCount  # noqa: F401,E501
from .partner_type import PartnerType  # noqa: F401,E501
from .properties import Properties  # noqa: F401,E501


class GetVariationsRequest(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 = {
        'asin': 'str',
        'condition': 'Condition',
        'currency_of_preference': 'str',
        'languages_of_preference': 'list[str]',
        'marketplace': 'str',
        'merchant': 'Merchant',
        'offer_count': 'OfferCount',
        'partner_tag': 'str',
        'partner_type': 'PartnerType',
        'properties': 'Properties',
        'resources': 'list[GetVariationsResource]',
        'variation_count': 'int',
        'variation_page': 'int'
    }

    attribute_map = {
        'asin': 'ASIN',
        'condition': 'Condition',
        'currency_of_preference': 'CurrencyOfPreference',
        'languages_of_preference': 'LanguagesOfPreference',
        'marketplace': 'Marketplace',
        'merchant': 'Merchant',
        'offer_count': 'OfferCount',
        'partner_tag': 'PartnerTag',
        'partner_type': 'PartnerType',
        'properties': 'Properties',
        'resources': 'Resources',
        'variation_count': 'VariationCount',
        'variation_page': 'VariationPage'
    }

    def __init__(self, asin=None, condition=None, currency_of_preference=None, languages_of_preference=None, marketplace=None, merchant=None, offer_count=None, partner_tag=None, partner_type=None, properties=None, resources=None, variation_count=None, variation_page=None):  # noqa: E501
        """GetVariationsRequest - a model defined in Swagger"""  # noqa: E501

        self._asin = None
        self._condition = None
        self._currency_of_preference = None
        self._languages_of_preference = None
        self._marketplace = None
        self._merchant = None
        self._offer_count = None
        self._partner_tag = None
        self._partner_type = None
        self._properties = None
        self._resources = None
        self._variation_count = None
        self._variation_page = None
        self.discriminator = None

        self.asin = asin
        if condition is not None:
            self.condition = condition
        if currency_of_preference is not None:
            self.currency_of_preference = currency_of_preference
        if languages_of_preference is not None:
            self.languages_of_preference = languages_of_preference
        if marketplace is not None:
            self.marketplace = marketplace
        if merchant is not None:
            self.merchant = merchant
        if offer_count is not None:
            self.offer_count = offer_count
        self.partner_tag = partner_tag
        self.partner_type = partner_type
        if properties is not None:
            self.properties = properties
        if resources is not None:
            self.resources = resources
        if variation_count is not None:
            self.variation_count = variation_count
        if variation_page is not None:
            self.variation_page = variation_page

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


        :return: The asin of this GetVariationsRequest.  # noqa: E501
        :rtype: str
        """
        return self._asin

    @asin.setter
    def asin(self, asin):
        """Sets the asin of this GetVariationsRequest.


        :param asin: The asin of this GetVariationsRequest.  # noqa: E501
        :type: str
        """
        if asin is None:
            raise ValueError("Invalid value for `asin`, must not be `None`")  # noqa: E501

        self._asin = asin

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


        :return: The condition of this GetVariationsRequest.  # noqa: E501
        :rtype: Condition
        """
        return self._condition

    @condition.setter
    def condition(self, condition):
        """Sets the condition of this GetVariationsRequest.


        :param condition: The condition of this GetVariationsRequest.  # noqa: E501
        :type: Condition
        """

        self._condition = condition

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


        :return: The currency_of_preference of this GetVariationsRequest.  # noqa: E501
        :rtype: str
        """
        return self._currency_of_preference

    @currency_of_preference.setter
    def currency_of_preference(self, currency_of_preference):
        """Sets the currency_of_preference of this GetVariationsRequest.


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

        self._currency_of_preference = currency_of_preference

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


        :return: The languages_of_preference of this GetVariationsRequest.  # noqa: E501
        :rtype: list[str]
        """
        return self._languages_of_preference

    @languages_of_preference.setter
    def languages_of_preference(self, languages_of_preference):
        """Sets the languages_of_preference of this GetVariationsRequest.


        :param languages_of_preference: The languages_of_preference of this GetVariationsRequest.  # noqa: E501
        :type: list[str]
        """

        self._languages_of_preference = languages_of_preference

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


        :return: The marketplace of this GetVariationsRequest.  # noqa: E501
        :rtype: str
        """
        return self._marketplace

    @marketplace.setter
    def marketplace(self, marketplace):
        """Sets the marketplace of this GetVariationsRequest.


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

        self._marketplace = marketplace

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


        :return: The merchant of this GetVariationsRequest.  # noqa: E501
        :rtype: Merchant
        """
        return self._merchant

    @merchant.setter
    def merchant(self, merchant):
        """Sets the merchant of this GetVariationsRequest.


        :param merchant: The merchant of this GetVariationsRequest.  # noqa: E501
        :type: Merchant
        """

        self._merchant = merchant

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


        :return: The offer_count of this GetVariationsRequest.  # noqa: E501
        :rtype: OfferCount
        """
        return self._offer_count

    @offer_count.setter
    def offer_count(self, offer_count):
        """Sets the offer_count of this GetVariationsRequest.


        :param offer_count: The offer_count of this GetVariationsRequest.  # noqa: E501
        :type: OfferCount
        """

        self._offer_count = offer_count

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


        :return: The partner_tag of this GetVariationsRequest.  # noqa: E501
        :rtype: str
        """
        return self._partner_tag

    @partner_tag.setter
    def partner_tag(self, partner_tag):
        """Sets the partner_tag of this GetVariationsRequest.


        :param partner_tag: The partner_tag of this GetVariationsRequest.  # noqa: E501
        :type: str
        """
        if partner_tag is None:
            raise ValueError("Invalid value for `partner_tag`, must not be `None`")  # noqa: E501

        self._partner_tag = partner_tag

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


        :return: The partner_type of this GetVariationsRequest.  # noqa: E501
        :rtype: PartnerType
        """
        return self._partner_type

    @partner_type.setter
    def partner_type(self, partner_type):
        """Sets the partner_type of this GetVariationsRequest.


        :param partner_type: The partner_type of this GetVariationsRequest.  # noqa: E501
        :type: PartnerType
        """
        if partner_type is None:
            raise ValueError("Invalid value for `partner_type`, must not be `None`")  # noqa: E501

        self._partner_type = partner_type

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


        :return: The properties of this GetVariationsRequest.  # noqa: E501
        :rtype: Properties
        """
        return self._properties

    @properties.setter
    def properties(self, properties):
        """Sets the properties of this GetVariationsRequest.


        :param properties: The properties of this GetVariationsRequest.  # noqa: E501
        :type: Properties
        """

        self._properties = properties

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


        :return: The resources of this GetVariationsRequest.  # noqa: E501
        :rtype: list[GetVariationsResource]
        """
        return self._resources

    @resources.setter
    def resources(self, resources):
        """Sets the resources of this GetVariationsRequest.


        :param resources: The resources of this GetVariationsRequest.  # noqa: E501
        :type: list[GetVariationsResource]
        """

        self._resources = resources

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


        :return: The variation_count of this GetVariationsRequest.  # noqa: E501
        :rtype: int
        """
        return self._variation_count

    @variation_count.setter
    def variation_count(self, variation_count):
        """Sets the variation_count of this GetVariationsRequest.


        :param variation_count: The variation_count of this GetVariationsRequest.  # noqa: E501
        :type: int
        """

        self._variation_count = variation_count

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


        :return: The variation_page of this GetVariationsRequest.  # noqa: E501
        :rtype: int
        """
        return self._variation_page

    @variation_page.setter
    def variation_page(self, variation_page):
        """Sets the variation_page of this GetVariationsRequest.


        :param variation_page: The variation_page of this GetVariationsRequest.  # noqa: E501
        :type: int
        """

        self._variation_page = variation_page

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

        return self.__dict__ == other.__dict__

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