# coding: utf-8

"""
    The Selling Partner API for Amazon External Fulfillment Shipments Processing

    You can use the External Fulfillment Shipments API to retrieve, manage, and track shipments processed through Amazon's external fulfillment network. Use this API to get shipment details, monitor status changes, and access fulfillment requirements.

    The version of the OpenAPI document: 2024-09-11
    Contact: marketplaceapitest@amazon.com
    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 MarketplaceAttributes(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 = {
        'marketplace_id': 'str',
        'channel_name': 'str',
        'merchant_id': 'str',
        'custom_attributes': 'List[str]',
    }

    attribute_map = {
        'marketplace_id': 'marketplaceId',
        'channel_name': 'channelName',
        'merchant_id': 'merchantId',
        'custom_attributes': 'customAttributes',
    }

    def __init__(self, marketplace_id=None, channel_name=None, merchant_id=None, custom_attributes=None, _configuration=None):  # noqa: E501
        """MarketplaceAttributes - a model defined in Swagger"""  # noqa: E501
        if _configuration is None:
            _configuration = Configuration()
        self._configuration = _configuration

        self._marketplace_id = None
        self._channel_name = None
        self._merchant_id = None
        self._custom_attributes = None
        self.discriminator = None

        self.marketplace_id = marketplace_id
        self.channel_name = channel_name
        if merchant_id is not None:
            self.merchant_id = merchant_id
        if custom_attributes is not None:
            self.custom_attributes = custom_attributes

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

        The marketplace ID associated with the location. To find the ID for your marketplace, refer to [Marketplace IDs](https://developer-docs.amazon.com/sp-api/docs/marketplace-ids).  # noqa: E501

        :return: The marketplace_id of this MarketplaceAttributes.  # noqa: E501
        :rtype: str
        """
        return self._marketplace_id

    @marketplace_id.setter
    def marketplace_id(self, marketplace_id):
        """Sets the marketplace_id of this MarketplaceAttributes.

        The marketplace ID associated with the location. To find the ID for your marketplace, refer to [Marketplace IDs](https://developer-docs.amazon.com/sp-api/docs/marketplace-ids).  # noqa: E501

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

        self._marketplace_id = marketplace_id

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

        The channel name associated with the location.  # noqa: E501

        :return: The channel_name of this MarketplaceAttributes.  # noqa: E501
        :rtype: str
        """
        return self._channel_name

    @channel_name.setter
    def channel_name(self, channel_name):
        """Sets the channel_name of this MarketplaceAttributes.

        The channel name associated with the location.  # noqa: E501

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

        self._channel_name = channel_name

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

        The ID of the merchant or seller to whom this order is created.  # noqa: E501

        :return: The merchant_id of this MarketplaceAttributes.  # noqa: E501
        :rtype: str
        """
        return self._merchant_id

    @merchant_id.setter
    def merchant_id(self, merchant_id):
        """Sets the merchant_id of this MarketplaceAttributes.

        The ID of the merchant or seller to whom this order is created.  # noqa: E501

        :param merchant_id: The merchant_id of this MarketplaceAttributes.  # noqa: E501
        :type: str
        """

        self._merchant_id = merchant_id

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

        Marketplace channel-specific attribute value.  # noqa: E501

        :return: The custom_attributes of this MarketplaceAttributes.  # noqa: E501
        :rtype: List[str]
        """
        return self._custom_attributes

    @custom_attributes.setter
    def custom_attributes(self, custom_attributes):
        """Sets the custom_attributes of this MarketplaceAttributes.

        Marketplace channel-specific attribute value.  # noqa: E501

        :param custom_attributes: The custom_attributes of this MarketplaceAttributes.  # noqa: E501
        :type: List[str]
        """
        allowed_values = ["PRIME", "FASTTRACK"]  # noqa: E501
        if (self._configuration.client_side_validation and
                not set(custom_attributes).issubset(set(allowed_values))):  # noqa: E501
            raise ValueError(
                "Invalid values for `custom_attributes` [{0}], must be a subset of [{1}]"  # noqa: E501
                .format(", ".join(map(str, set(custom_attributes) - set(allowed_values))),  # noqa: E501
                        ", ".join(map(str, allowed_values)))
            )

        self._custom_attributes = custom_attributes

    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(MarketplaceAttributes, 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, MarketplaceAttributes):
            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, MarketplaceAttributes):
            return True

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