# coding: utf-8

"""
    Selling Partner API for Direct Fulfillment Orders

    The Selling Partner API for Direct Fulfillment Orders provides programmatic access to a direct fulfillment vendor's order data.

    The version of the OpenAPI document: 2021-12-28
    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 ShipmentDetails(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 = {
        'is_priority_shipment': 'bool',
        'is_scheduled_delivery_shipment': 'bool',
        'is_pslip_required': 'bool',
        'is_gift': 'bool',
        'ship_method': 'str',
        'shipment_dates': 'ShipmentDates',
        'message_to_customer': 'str',
    }

    attribute_map = {
        'is_priority_shipment': 'isPriorityShipment',
        'is_scheduled_delivery_shipment': 'isScheduledDeliveryShipment',
        'is_pslip_required': 'isPslipRequired',
        'is_gift': 'isGift',
        'ship_method': 'shipMethod',
        'shipment_dates': 'shipmentDates',
        'message_to_customer': 'messageToCustomer',
    }

    def __init__(self, is_priority_shipment=None, is_scheduled_delivery_shipment=None, is_pslip_required=None, is_gift=None, ship_method=None, shipment_dates=None, message_to_customer=None, _configuration=None):  # noqa: E501
        """ShipmentDetails - a model defined in Swagger"""  # noqa: E501
        if _configuration is None:
            _configuration = Configuration()
        self._configuration = _configuration

        self._is_priority_shipment = None
        self._is_scheduled_delivery_shipment = None
        self._is_pslip_required = None
        self._is_gift = None
        self._ship_method = None
        self._shipment_dates = None
        self._message_to_customer = None
        self.discriminator = None

        self.is_priority_shipment = is_priority_shipment
        if is_scheduled_delivery_shipment is not None:
            self.is_scheduled_delivery_shipment = is_scheduled_delivery_shipment
        self.is_pslip_required = is_pslip_required
        if is_gift is not None:
            self.is_gift = is_gift
        self.ship_method = ship_method
        self.shipment_dates = shipment_dates
        self.message_to_customer = message_to_customer

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

        When true, this is a priority shipment.  # noqa: E501

        :return: The is_priority_shipment of this ShipmentDetails.  # noqa: E501
        :rtype: bool
        """
        return self._is_priority_shipment

    @is_priority_shipment.setter
    def is_priority_shipment(self, is_priority_shipment):
        """Sets the is_priority_shipment of this ShipmentDetails.

        When true, this is a priority shipment.  # noqa: E501

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

        self._is_priority_shipment = is_priority_shipment

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

        When true, this order is part of a scheduled delivery program.  # noqa: E501

        :return: The is_scheduled_delivery_shipment of this ShipmentDetails.  # noqa: E501
        :rtype: bool
        """
        return self._is_scheduled_delivery_shipment

    @is_scheduled_delivery_shipment.setter
    def is_scheduled_delivery_shipment(self, is_scheduled_delivery_shipment):
        """Sets the is_scheduled_delivery_shipment of this ShipmentDetails.

        When true, this order is part of a scheduled delivery program.  # noqa: E501

        :param is_scheduled_delivery_shipment: The is_scheduled_delivery_shipment of this ShipmentDetails.  # noqa: E501
        :type: bool
        """

        self._is_scheduled_delivery_shipment = is_scheduled_delivery_shipment

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

        When true, a packing slip is required to be sent to the customer.  # noqa: E501

        :return: The is_pslip_required of this ShipmentDetails.  # noqa: E501
        :rtype: bool
        """
        return self._is_pslip_required

    @is_pslip_required.setter
    def is_pslip_required(self, is_pslip_required):
        """Sets the is_pslip_required of this ShipmentDetails.

        When true, a packing slip is required to be sent to the customer.  # noqa: E501

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

        self._is_pslip_required = is_pslip_required

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

        When true, the order contain a gift. Include the gift message and gift wrap information.  # noqa: E501

        :return: The is_gift of this ShipmentDetails.  # noqa: E501
        :rtype: bool
        """
        return self._is_gift

    @is_gift.setter
    def is_gift(self, is_gift):
        """Sets the is_gift of this ShipmentDetails.

        When true, the order contain a gift. Include the gift message and gift wrap information.  # noqa: E501

        :param is_gift: The is_gift of this ShipmentDetails.  # noqa: E501
        :type: bool
        """

        self._is_gift = is_gift

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

        Ship method to be used for shipping the order. Amazon defines ship method codes indicating the shipping carrier and shipment service level. To see the full list of ship methods in use, including both the code and the friendly name, search the 'Help' section on Vendor Central for 'ship methods'.  # noqa: E501

        :return: The ship_method of this ShipmentDetails.  # noqa: E501
        :rtype: str
        """
        return self._ship_method

    @ship_method.setter
    def ship_method(self, ship_method):
        """Sets the ship_method of this ShipmentDetails.

        Ship method to be used for shipping the order. Amazon defines ship method codes indicating the shipping carrier and shipment service level. To see the full list of ship methods in use, including both the code and the friendly name, search the 'Help' section on Vendor Central for 'ship methods'.  # noqa: E501

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

        self._ship_method = ship_method

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


        :return: The shipment_dates of this ShipmentDetails.  # noqa: E501
        :rtype: ShipmentDates
        """
        return self._shipment_dates

    @shipment_dates.setter
    def shipment_dates(self, shipment_dates):
        """Sets the shipment_dates of this ShipmentDetails.


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

        self._shipment_dates = shipment_dates

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

        Message to customer for order status.  # noqa: E501

        :return: The message_to_customer of this ShipmentDetails.  # noqa: E501
        :rtype: str
        """
        return self._message_to_customer

    @message_to_customer.setter
    def message_to_customer(self, message_to_customer):
        """Sets the message_to_customer of this ShipmentDetails.

        Message to customer for order status.  # noqa: E501

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

        self._message_to_customer = message_to_customer

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

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