# 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 InboundShipmentInfo(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',
        'shipment_name': 'str',
        'ship_from_address': 'Address',
        'destination_fulfillment_center_id': 'str',
        'shipment_status': 'ShipmentStatus',
        'label_prep_type': 'LabelPrepType',
        'are_cases_required': 'bool',
        'confirmed_need_by_date': 'date',
        'box_contents_source': 'BoxContentsSource',
        'estimated_box_contents_fee': 'BoxContentsFeeDetails',
    }

    attribute_map = {
        'shipment_id': 'ShipmentId',
        'shipment_name': 'ShipmentName',
        'ship_from_address': 'ShipFromAddress',
        'destination_fulfillment_center_id': 'DestinationFulfillmentCenterId',
        'shipment_status': 'ShipmentStatus',
        'label_prep_type': 'LabelPrepType',
        'are_cases_required': 'AreCasesRequired',
        'confirmed_need_by_date': 'ConfirmedNeedByDate',
        'box_contents_source': 'BoxContentsSource',
        'estimated_box_contents_fee': 'EstimatedBoxContentsFee',
    }

    def __init__(self, shipment_id=None, shipment_name=None, ship_from_address=None, destination_fulfillment_center_id=None, shipment_status=None, label_prep_type=None, are_cases_required=None, confirmed_need_by_date=None, box_contents_source=None, estimated_box_contents_fee=None, _configuration=None):  # noqa: E501
        """InboundShipmentInfo - a model defined in Swagger"""  # noqa: E501
        if _configuration is None:
            _configuration = Configuration()
        self._configuration = _configuration

        self._shipment_id = None
        self._shipment_name = None
        self._ship_from_address = None
        self._destination_fulfillment_center_id = None
        self._shipment_status = None
        self._label_prep_type = None
        self._are_cases_required = None
        self._confirmed_need_by_date = None
        self._box_contents_source = None
        self._estimated_box_contents_fee = None
        self.discriminator = None

        if shipment_id is not None:
            self.shipment_id = shipment_id
        if shipment_name is not None:
            self.shipment_name = shipment_name
        self.ship_from_address = ship_from_address
        if destination_fulfillment_center_id is not None:
            self.destination_fulfillment_center_id = destination_fulfillment_center_id
        if shipment_status is not None:
            self.shipment_status = shipment_status
        if label_prep_type is not None:
            self.label_prep_type = label_prep_type
        self.are_cases_required = are_cases_required
        if confirmed_need_by_date is not None:
            self.confirmed_need_by_date = confirmed_need_by_date
        if box_contents_source is not None:
            self.box_contents_source = box_contents_source
        if estimated_box_contents_fee is not None:
            self.estimated_box_contents_fee = estimated_box_contents_fee

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

        The shipment identifier submitted in the request.  # noqa: E501

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

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

        The shipment identifier submitted in the request.  # noqa: E501

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

        self._shipment_id = shipment_id

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

        The name for the inbound shipment.  # noqa: E501

        :return: The shipment_name of this InboundShipmentInfo.  # noqa: E501
        :rtype: str
        """
        return self._shipment_name

    @shipment_name.setter
    def shipment_name(self, shipment_name):
        """Sets the shipment_name of this InboundShipmentInfo.

        The name for the inbound shipment.  # noqa: E501

        :param shipment_name: The shipment_name of this InboundShipmentInfo.  # noqa: E501
        :type: str
        """

        self._shipment_name = shipment_name

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


        :return: The ship_from_address of this InboundShipmentInfo.  # noqa: E501
        :rtype: Address
        """
        return self._ship_from_address

    @ship_from_address.setter
    def ship_from_address(self, ship_from_address):
        """Sets the ship_from_address of this InboundShipmentInfo.


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

        self._ship_from_address = ship_from_address

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

        An Amazon fulfillment center identifier created by Amazon.  # noqa: E501

        :return: The destination_fulfillment_center_id of this InboundShipmentInfo.  # noqa: E501
        :rtype: str
        """
        return self._destination_fulfillment_center_id

    @destination_fulfillment_center_id.setter
    def destination_fulfillment_center_id(self, destination_fulfillment_center_id):
        """Sets the destination_fulfillment_center_id of this InboundShipmentInfo.

        An Amazon fulfillment center identifier created by Amazon.  # noqa: E501

        :param destination_fulfillment_center_id: The destination_fulfillment_center_id of this InboundShipmentInfo.  # noqa: E501
        :type: str
        """

        self._destination_fulfillment_center_id = destination_fulfillment_center_id

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


        :return: The shipment_status of this InboundShipmentInfo.  # noqa: E501
        :rtype: ShipmentStatus
        """
        return self._shipment_status

    @shipment_status.setter
    def shipment_status(self, shipment_status):
        """Sets the shipment_status of this InboundShipmentInfo.


        :param shipment_status: The shipment_status of this InboundShipmentInfo.  # noqa: E501
        :type: ShipmentStatus
        """

        self._shipment_status = shipment_status

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


        :return: The label_prep_type of this InboundShipmentInfo.  # noqa: E501
        :rtype: LabelPrepType
        """
        return self._label_prep_type

    @label_prep_type.setter
    def label_prep_type(self, label_prep_type):
        """Sets the label_prep_type of this InboundShipmentInfo.


        :param label_prep_type: The label_prep_type of this InboundShipmentInfo.  # noqa: E501
        :type: LabelPrepType
        """

        self._label_prep_type = label_prep_type

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

        Indicates whether or not an inbound shipment contains case-packed boxes. When AreCasesRequired = true for an inbound shipment, all items in the inbound shipment must be case packed.  # noqa: E501

        :return: The are_cases_required of this InboundShipmentInfo.  # noqa: E501
        :rtype: bool
        """
        return self._are_cases_required

    @are_cases_required.setter
    def are_cases_required(self, are_cases_required):
        """Sets the are_cases_required of this InboundShipmentInfo.

        Indicates whether or not an inbound shipment contains case-packed boxes. When AreCasesRequired = true for an inbound shipment, all items in the inbound shipment must be case packed.  # noqa: E501

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

        self._are_cases_required = are_cases_required

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

        Type containing date in string format  # noqa: E501

        :return: The confirmed_need_by_date of this InboundShipmentInfo.  # noqa: E501
        :rtype: date
        """
        return self._confirmed_need_by_date

    @confirmed_need_by_date.setter
    def confirmed_need_by_date(self, confirmed_need_by_date):
        """Sets the confirmed_need_by_date of this InboundShipmentInfo.

        Type containing date in string format  # noqa: E501

        :param confirmed_need_by_date: The confirmed_need_by_date of this InboundShipmentInfo.  # noqa: E501
        :type: date
        """

        self._confirmed_need_by_date = confirmed_need_by_date

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


        :return: The box_contents_source of this InboundShipmentInfo.  # noqa: E501
        :rtype: BoxContentsSource
        """
        return self._box_contents_source

    @box_contents_source.setter
    def box_contents_source(self, box_contents_source):
        """Sets the box_contents_source of this InboundShipmentInfo.


        :param box_contents_source: The box_contents_source of this InboundShipmentInfo.  # noqa: E501
        :type: BoxContentsSource
        """

        self._box_contents_source = box_contents_source

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


        :return: The estimated_box_contents_fee of this InboundShipmentInfo.  # noqa: E501
        :rtype: BoxContentsFeeDetails
        """
        return self._estimated_box_contents_fee

    @estimated_box_contents_fee.setter
    def estimated_box_contents_fee(self, estimated_box_contents_fee):
        """Sets the estimated_box_contents_fee of this InboundShipmentInfo.


        :param estimated_box_contents_fee: The estimated_box_contents_fee of this InboundShipmentInfo.  # noqa: E501
        :type: BoxContentsFeeDetails
        """

        self._estimated_box_contents_fee = estimated_box_contents_fee

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

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