# coding: utf-8

"""
    Selling Partner API for Fulfillment Inbound

    The Selling Partner API for Fulfillment Inbound lets you create applications that create and update inbound shipments of inventory to Amazon's fulfillment network.

    The version of the OpenAPI document: v0
    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 InboundShipmentItem(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 = {
        'shipment_id': 'str',
        'seller_sku': 'str',
        'fulfillment_network_sku': 'str',
        'quantity_shipped': 'int',
        'quantity_received': 'int',
        'quantity_in_case': 'int',
        'release_date': 'date',
        'prep_details_list': 'List[PrepDetails]',
    }

    attribute_map = {
        'shipment_id': 'ShipmentId',
        'seller_sku': 'SellerSKU',
        'fulfillment_network_sku': 'FulfillmentNetworkSKU',
        'quantity_shipped': 'QuantityShipped',
        'quantity_received': 'QuantityReceived',
        'quantity_in_case': 'QuantityInCase',
        'release_date': 'ReleaseDate',
        'prep_details_list': 'PrepDetailsList',
    }

    def __init__(self, shipment_id=None, seller_sku=None, fulfillment_network_sku=None, quantity_shipped=None, quantity_received=None, quantity_in_case=None, release_date=None, prep_details_list=None, _configuration=None):  # noqa: E501
        """InboundShipmentItem - a model defined in Swagger"""  # noqa: E501
        if _configuration is None:
            _configuration = Configuration()
        self._configuration = _configuration

        self._shipment_id = None
        self._seller_sku = None
        self._fulfillment_network_sku = None
        self._quantity_shipped = None
        self._quantity_received = None
        self._quantity_in_case = None
        self._release_date = None
        self._prep_details_list = None
        self.discriminator = None

        if shipment_id is not None:
            self.shipment_id = shipment_id
        self.seller_sku = seller_sku
        if fulfillment_network_sku is not None:
            self.fulfillment_network_sku = fulfillment_network_sku
        self.quantity_shipped = quantity_shipped
        if quantity_received is not None:
            self.quantity_received = quantity_received
        if quantity_in_case is not None:
            self.quantity_in_case = quantity_in_case
        if release_date is not None:
            self.release_date = release_date
        if prep_details_list is not None:
            self.prep_details_list = prep_details_list

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

        A shipment identifier originally returned by the createInboundShipmentPlan operation.  # noqa: E501

        :return: The shipment_id of this InboundShipmentItem.  # noqa: E501
        :rtype: str
        """
        return self._shipment_id

    @shipment_id.setter
    def shipment_id(self, shipment_id):
        """Sets the shipment_id of this InboundShipmentItem.

        A shipment identifier originally returned by the createInboundShipmentPlan operation.  # noqa: E501

        :param shipment_id: The shipment_id of this InboundShipmentItem.  # noqa: E501
        :type: str
        """

        self._shipment_id = shipment_id

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

        The seller SKU of the item.  # noqa: E501

        :return: The seller_sku of this InboundShipmentItem.  # noqa: E501
        :rtype: str
        """
        return self._seller_sku

    @seller_sku.setter
    def seller_sku(self, seller_sku):
        """Sets the seller_sku of this InboundShipmentItem.

        The seller SKU of the item.  # noqa: E501

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

        self._seller_sku = seller_sku

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

        Amazon's fulfillment network SKU of the item.  # noqa: E501

        :return: The fulfillment_network_sku of this InboundShipmentItem.  # noqa: E501
        :rtype: str
        """
        return self._fulfillment_network_sku

    @fulfillment_network_sku.setter
    def fulfillment_network_sku(self, fulfillment_network_sku):
        """Sets the fulfillment_network_sku of this InboundShipmentItem.

        Amazon's fulfillment network SKU of the item.  # noqa: E501

        :param fulfillment_network_sku: The fulfillment_network_sku of this InboundShipmentItem.  # noqa: E501
        :type: str
        """

        self._fulfillment_network_sku = fulfillment_network_sku

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

        The item quantity.  # noqa: E501

        :return: The quantity_shipped of this InboundShipmentItem.  # noqa: E501
        :rtype: int
        """
        return self._quantity_shipped

    @quantity_shipped.setter
    def quantity_shipped(self, quantity_shipped):
        """Sets the quantity_shipped of this InboundShipmentItem.

        The item quantity.  # noqa: E501

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

        self._quantity_shipped = quantity_shipped

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

        The item quantity.  # noqa: E501

        :return: The quantity_received of this InboundShipmentItem.  # noqa: E501
        :rtype: int
        """
        return self._quantity_received

    @quantity_received.setter
    def quantity_received(self, quantity_received):
        """Sets the quantity_received of this InboundShipmentItem.

        The item quantity.  # noqa: E501

        :param quantity_received: The quantity_received of this InboundShipmentItem.  # noqa: E501
        :type: int
        """

        self._quantity_received = quantity_received

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

        The item quantity.  # noqa: E501

        :return: The quantity_in_case of this InboundShipmentItem.  # noqa: E501
        :rtype: int
        """
        return self._quantity_in_case

    @quantity_in_case.setter
    def quantity_in_case(self, quantity_in_case):
        """Sets the quantity_in_case of this InboundShipmentItem.

        The item quantity.  # noqa: E501

        :param quantity_in_case: The quantity_in_case of this InboundShipmentItem.  # noqa: E501
        :type: int
        """

        self._quantity_in_case = quantity_in_case

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

        Type containing date in string format  # noqa: E501

        :return: The release_date of this InboundShipmentItem.  # noqa: E501
        :rtype: date
        """
        return self._release_date

    @release_date.setter
    def release_date(self, release_date):
        """Sets the release_date of this InboundShipmentItem.

        Type containing date in string format  # noqa: E501

        :param release_date: The release_date of this InboundShipmentItem.  # noqa: E501
        :type: date
        """

        self._release_date = release_date

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

        A list of preparation instructions and who is responsible for that preparation.  # noqa: E501

        :return: The prep_details_list of this InboundShipmentItem.  # noqa: E501
        :rtype: List[PrepDetails]
        """
        return self._prep_details_list

    @prep_details_list.setter
    def prep_details_list(self, prep_details_list):
        """Sets the prep_details_list of this InboundShipmentItem.

        A list of preparation instructions and who is responsible for that preparation.  # noqa: E501

        :param prep_details_list: The prep_details_list of this InboundShipmentItem.  # noqa: E501
        :type: List[PrepDetails]
        """

        self._prep_details_list = prep_details_list

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

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