# coding: utf-8

"""
    EDIS public shipping API

    <div class=\"msgbox_important\"><p class=\"msgbox_importantInDiv\" data-mc-autonum=\"&lt;b&gt;&lt;span style=&quot;color: #dd1e31;&quot; class=&quot;mcFormatColor&quot;&gt;Important! &lt;/span&gt;&lt;/b&gt;\"><span class=\"autonumber\"><span><b><span style=\"color: #dd1e31;\" class=\"mcFormatColor\">Important!</span></b></span></span> This method is only available for Greater-China based sellers with an active eDIS account.</p></div><br>This API allows 3rd party developers in the Greater-China area to process package shipping details.  # noqa: E501

    OpenAPI spec version: 1.0.0
    
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""

import pprint
import re  # noqa: F401

import six

class PackageInfoRequest(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 = {
        'agent_info_request': 'AgentInfoData',
        'consign_preference_id': 'str',
        'incoterm': 'str',
        'items': 'list[ItemRequest]',
        'max_quantity_limit': 'int',
        'package_comment': 'str',
        'package_height': 'float',
        'package_length': 'float',
        'package_weight': 'float',
        'package_width': 'float',
        'ship_from_address_id': 'str',
        'shipping_service_id': 'str',
        'ship_to_address': 'ShipToAddressRequestData',
        'special_service_detail': 'SpecialServiceDetail',
        'value_for_carriage': 'str'
    }

    attribute_map = {
        'agent_info_request': 'agentInfoRequest',
        'consign_preference_id': 'consignPreferenceId',
        'incoterm': 'incoterm',
        'items': 'items',
        'max_quantity_limit': 'maxQuantityLimit',
        'package_comment': 'packageComment',
        'package_height': 'packageHeight',
        'package_length': 'packageLength',
        'package_weight': 'packageWeight',
        'package_width': 'packageWidth',
        'ship_from_address_id': 'shipFromAddressId',
        'shipping_service_id': 'shippingServiceId',
        'ship_to_address': 'shipToAddress',
        'special_service_detail': 'specialServiceDetail',
        'value_for_carriage': 'valueForCarriage'
    }

    def __init__(self, agent_info_request=None, consign_preference_id=None, incoterm=None, items=None, max_quantity_limit=None, package_comment=None, package_height=None, package_length=None, package_weight=None, package_width=None, ship_from_address_id=None, shipping_service_id=None, ship_to_address=None, special_service_detail=None, value_for_carriage=None):  # noqa: E501
        """PackageInfoRequest - a model defined in Swagger"""  # noqa: E501
        self._agent_info_request = None
        self._consign_preference_id = None
        self._incoterm = None
        self._items = None
        self._max_quantity_limit = None
        self._package_comment = None
        self._package_height = None
        self._package_length = None
        self._package_weight = None
        self._package_width = None
        self._ship_from_address_id = None
        self._shipping_service_id = None
        self._ship_to_address = None
        self._special_service_detail = None
        self._value_for_carriage = None
        self.discriminator = None
        if agent_info_request is not None:
            self.agent_info_request = agent_info_request
        if consign_preference_id is not None:
            self.consign_preference_id = consign_preference_id
        if incoterm is not None:
            self.incoterm = incoterm
        if items is not None:
            self.items = items
        if max_quantity_limit is not None:
            self.max_quantity_limit = max_quantity_limit
        if package_comment is not None:
            self.package_comment = package_comment
        if package_height is not None:
            self.package_height = package_height
        if package_length is not None:
            self.package_length = package_length
        if package_weight is not None:
            self.package_weight = package_weight
        if package_width is not None:
            self.package_width = package_width
        if ship_from_address_id is not None:
            self.ship_from_address_id = ship_from_address_id
        if shipping_service_id is not None:
            self.shipping_service_id = shipping_service_id
        if ship_to_address is not None:
            self.ship_to_address = ship_to_address
        if special_service_detail is not None:
            self.special_service_detail = special_service_detail
        if value_for_carriage is not None:
            self.value_for_carriage = value_for_carriage

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


        :return: The agent_info_request of this PackageInfoRequest.  # noqa: E501
        :rtype: AgentInfoData
        """
        return self._agent_info_request

    @agent_info_request.setter
    def agent_info_request(self, agent_info_request):
        """Sets the agent_info_request of this PackageInfoRequest.


        :param agent_info_request: The agent_info_request of this PackageInfoRequest.  # noqa: E501
        :type: AgentInfoData
        """

        self._agent_info_request = agent_info_request

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

        The unique identifier of the consign address to be associated with the package.<br><br>This ID can be retrieved using the <a href=\"/api-docs/sell/edelivery_international_shipping/resources/consign_preference/methods/getConsignPreferences\" target=\"_blank\">getConsignPreferences</a> method.  # noqa: E501

        :return: The consign_preference_id of this PackageInfoRequest.  # noqa: E501
        :rtype: str
        """
        return self._consign_preference_id

    @consign_preference_id.setter
    def consign_preference_id(self, consign_preference_id):
        """Sets the consign_preference_id of this PackageInfoRequest.

        The unique identifier of the consign address to be associated with the package.<br><br>This ID can be retrieved using the <a href=\"/api-docs/sell/edelivery_international_shipping/resources/consign_preference/methods/getConsignPreferences\" target=\"_blank\">getConsignPreferences</a> method.  # noqa: E501

        :param consign_preference_id: The consign_preference_id of this PackageInfoRequest.  # noqa: E501
        :type: str
        """

        self._consign_preference_id = consign_preference_id

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

        The incoterm information associated with the package.<br><br><b>Supported values</b>:<ul><li><code>DDP</code></li><li><code>DDU</code></li></ul> For implementation help, refer to <a href='https://developer.ebay.com/api-docs/sell/edelivery_international_shipping/types/api:IncotermEnum'>eBay API documentation</a>  # noqa: E501

        :return: The incoterm of this PackageInfoRequest.  # noqa: E501
        :rtype: str
        """
        return self._incoterm

    @incoterm.setter
    def incoterm(self, incoterm):
        """Sets the incoterm of this PackageInfoRequest.

        The incoterm information associated with the package.<br><br><b>Supported values</b>:<ul><li><code>DDP</code></li><li><code>DDU</code></li></ul> For implementation help, refer to <a href='https://developer.ebay.com/api-docs/sell/edelivery_international_shipping/types/api:IncotermEnum'>eBay API documentation</a>  # noqa: E501

        :param incoterm: The incoterm of this PackageInfoRequest.  # noqa: E501
        :type: str
        """

        self._incoterm = incoterm

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

        This array is used to specify applicable information about the eBay line item(s) that will be included in the package.  # noqa: E501

        :return: The items of this PackageInfoRequest.  # noqa: E501
        :rtype: list[ItemRequest]
        """
        return self._items

    @items.setter
    def items(self, items):
        """Sets the items of this PackageInfoRequest.

        This array is used to specify applicable information about the eBay line item(s) that will be included in the package.  # noqa: E501

        :param items: The items of this PackageInfoRequest.  # noqa: E501
        :type: list[ItemRequest]
        """

        self._items = items

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

        This field is used to limit the maximum number of parcels used in a single order. If the order has more than one parcel, revise this value to increase the limit.  # noqa: E501

        :return: The max_quantity_limit of this PackageInfoRequest.  # noqa: E501
        :rtype: int
        """
        return self._max_quantity_limit

    @max_quantity_limit.setter
    def max_quantity_limit(self, max_quantity_limit):
        """Sets the max_quantity_limit of this PackageInfoRequest.

        This field is used to limit the maximum number of parcels used in a single order. If the order has more than one parcel, revise this value to increase the limit.  # noqa: E501

        :param max_quantity_limit: The max_quantity_limit of this PackageInfoRequest.  # noqa: E501
        :type: int
        """

        self._max_quantity_limit = max_quantity_limit

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

        A seller-defined comment about the package.  # noqa: E501

        :return: The package_comment of this PackageInfoRequest.  # noqa: E501
        :rtype: str
        """
        return self._package_comment

    @package_comment.setter
    def package_comment(self, package_comment):
        """Sets the package_comment of this PackageInfoRequest.

        A seller-defined comment about the package.  # noqa: E501

        :param package_comment: The package_comment of this PackageInfoRequest.  # noqa: E501
        :type: str
        """

        self._package_comment = package_comment

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

        The height of the package in centimeters.  # noqa: E501

        :return: The package_height of this PackageInfoRequest.  # noqa: E501
        :rtype: float
        """
        return self._package_height

    @package_height.setter
    def package_height(self, package_height):
        """Sets the package_height of this PackageInfoRequest.

        The height of the package in centimeters.  # noqa: E501

        :param package_height: The package_height of this PackageInfoRequest.  # noqa: E501
        :type: float
        """

        self._package_height = package_height

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

        The length of the package in centimeters.  # noqa: E501

        :return: The package_length of this PackageInfoRequest.  # noqa: E501
        :rtype: float
        """
        return self._package_length

    @package_length.setter
    def package_length(self, package_length):
        """Sets the package_length of this PackageInfoRequest.

        The length of the package in centimeters.  # noqa: E501

        :param package_length: The package_length of this PackageInfoRequest.  # noqa: E501
        :type: float
        """

        self._package_length = package_length

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

        The weight of the package in grams.  # noqa: E501

        :return: The package_weight of this PackageInfoRequest.  # noqa: E501
        :rtype: float
        """
        return self._package_weight

    @package_weight.setter
    def package_weight(self, package_weight):
        """Sets the package_weight of this PackageInfoRequest.

        The weight of the package in grams.  # noqa: E501

        :param package_weight: The package_weight of this PackageInfoRequest.  # noqa: E501
        :type: float
        """

        self._package_weight = package_weight

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

        The width of the package in centimeters.  # noqa: E501

        :return: The package_width of this PackageInfoRequest.  # noqa: E501
        :rtype: float
        """
        return self._package_width

    @package_width.setter
    def package_width(self, package_width):
        """Sets the package_width of this PackageInfoRequest.

        The width of the package in centimeters.  # noqa: E501

        :param package_width: The package_width of this PackageInfoRequest.  # noqa: E501
        :type: float
        """

        self._package_width = package_width

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

        The unique identifier of the ship-from address used for the package.<br><br>Use the <a href=\"/api-docs/sell/edelivery_international_shipping/resources/address_preference/methods/getAddressPreferences\" target=\"_blank\">getAddressPreferences</a> method to retrieve valid ship-from <b>addressId</b> values associated with your account.  # noqa: E501

        :return: The ship_from_address_id of this PackageInfoRequest.  # noqa: E501
        :rtype: str
        """
        return self._ship_from_address_id

    @ship_from_address_id.setter
    def ship_from_address_id(self, ship_from_address_id):
        """Sets the ship_from_address_id of this PackageInfoRequest.

        The unique identifier of the ship-from address used for the package.<br><br>Use the <a href=\"/api-docs/sell/edelivery_international_shipping/resources/address_preference/methods/getAddressPreferences\" target=\"_blank\">getAddressPreferences</a> method to retrieve valid ship-from <b>addressId</b> values associated with your account.  # noqa: E501

        :param ship_from_address_id: The ship_from_address_id of this PackageInfoRequest.  # noqa: E501
        :type: str
        """

        self._ship_from_address_id = ship_from_address_id

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

        The unique identifier of the shipping service being used for the package.<br><br>This value can be retrieved using the <a href=\"/api-docs/sell/edelivery_international_shipping/resources/services/methods/getServices\" target=\"_blank\">getServices</a> method.  # noqa: E501

        :return: The shipping_service_id of this PackageInfoRequest.  # noqa: E501
        :rtype: str
        """
        return self._shipping_service_id

    @shipping_service_id.setter
    def shipping_service_id(self, shipping_service_id):
        """Sets the shipping_service_id of this PackageInfoRequest.

        The unique identifier of the shipping service being used for the package.<br><br>This value can be retrieved using the <a href=\"/api-docs/sell/edelivery_international_shipping/resources/services/methods/getServices\" target=\"_blank\">getServices</a> method.  # noqa: E501

        :param shipping_service_id: The shipping_service_id of this PackageInfoRequest.  # noqa: E501
        :type: str
        """

        self._shipping_service_id = shipping_service_id

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


        :return: The ship_to_address of this PackageInfoRequest.  # noqa: E501
        :rtype: ShipToAddressRequestData
        """
        return self._ship_to_address

    @ship_to_address.setter
    def ship_to_address(self, ship_to_address):
        """Sets the ship_to_address of this PackageInfoRequest.


        :param ship_to_address: The ship_to_address of this PackageInfoRequest.  # noqa: E501
        :type: ShipToAddressRequestData
        """

        self._ship_to_address = ship_to_address

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


        :return: The special_service_detail of this PackageInfoRequest.  # noqa: E501
        :rtype: SpecialServiceDetail
        """
        return self._special_service_detail

    @special_service_detail.setter
    def special_service_detail(self, special_service_detail):
        """Sets the special_service_detail of this PackageInfoRequest.


        :param special_service_detail: The special_service_detail of this PackageInfoRequest.  # noqa: E501
        :type: SpecialServiceDetail
        """

        self._special_service_detail = special_service_detail

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

        The declared value of a large carriage (a combination of several orders together).  # noqa: E501

        :return: The value_for_carriage of this PackageInfoRequest.  # noqa: E501
        :rtype: str
        """
        return self._value_for_carriage

    @value_for_carriage.setter
    def value_for_carriage(self, value_for_carriage):
        """Sets the value_for_carriage of this PackageInfoRequest.

        The declared value of a large carriage (a combination of several orders together).  # noqa: E501

        :param value_for_carriage: The value_for_carriage of this PackageInfoRequest.  # noqa: E501
        :type: str
        """

        self._value_for_carriage = value_for_carriage

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

        return self.__dict__ == other.__dict__

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