# 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 Address(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 = {
        'name': 'str',
        'address_line1': 'str',
        'address_line2': 'str',
        'address_line3': 'str',
        'district': 'str',
        'municipality': 'str',
        'state': 'str',
        'city': 'str',
        'country_code': 'str',
        'postal_code': 'str',
        'email': 'str',
        'copy_emails': 'List[str]',
        'phone_number': 'str',
        'address_type': 'str',
    }

    attribute_map = {
        'name': 'name',
        'address_line1': 'addressLine1',
        'address_line2': 'addressLine2',
        'address_line3': 'addressLine3',
        'district': 'district',
        'municipality': 'municipality',
        'state': 'state',
        'city': 'city',
        'country_code': 'countryCode',
        'postal_code': 'postalCode',
        'email': 'email',
        'copy_emails': 'copyEmails',
        'phone_number': 'phoneNumber',
        'address_type': 'addressType',
    }

    def __init__(self, name=None, address_line1=None, address_line2=None, address_line3=None, district=None, municipality=None, state=None, city=None, country_code=None, postal_code=None, email=None, copy_emails=None, phone_number=None, address_type=None, _configuration=None):  # noqa: E501
        """Address - a model defined in Swagger"""  # noqa: E501
        if _configuration is None:
            _configuration = Configuration()
        self._configuration = _configuration

        self._name = None
        self._address_line1 = None
        self._address_line2 = None
        self._address_line3 = None
        self._district = None
        self._municipality = None
        self._state = None
        self._city = None
        self._country_code = None
        self._postal_code = None
        self._email = None
        self._copy_emails = None
        self._phone_number = None
        self._address_type = None
        self.discriminator = None

        if name is not None:
            self.name = name
        if address_line1 is not None:
            self.address_line1 = address_line1
        if address_line2 is not None:
            self.address_line2 = address_line2
        if address_line3 is not None:
            self.address_line3 = address_line3
        if district is not None:
            self.district = district
        if municipality is not None:
            self.municipality = municipality
        if state is not None:
            self.state = state
        if city is not None:
            self.city = city
        if country_code is not None:
            self.country_code = country_code
        self.postal_code = postal_code
        if email is not None:
            self.email = email
        if copy_emails is not None:
            self.copy_emails = copy_emails
        if phone_number is not None:
            self.phone_number = phone_number
        if address_type is not None:
            self.address_type = address_type

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

        The name of the person, business or institution at that address.  # noqa: E501

        :return: The name of this Address.  # noqa: E501
        :rtype: str
        """
        return self._name

    @name.setter
    def name(self, name):
        """Sets the name of this Address.

        The name of the person, business or institution at that address.  # noqa: E501

        :param name: The name of this Address.  # noqa: E501
        :type: str
        """
        if (self._configuration.client_side_validation and
                name is not None and len(name) > 50):
            raise ValueError("Invalid value for `name`, length must be less than or equal to `50`")  # noqa: E501
        if (self._configuration.client_side_validation and
                name is not None and len(name) < 1):
            raise ValueError("Invalid value for `name`, length must be greater than or equal to `1`")  # noqa: E501

        self._name = name

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

        The first line of the address.  # noqa: E501

        :return: The address_line1 of this Address.  # noqa: E501
        :rtype: str
        """
        return self._address_line1

    @address_line1.setter
    def address_line1(self, address_line1):
        """Sets the address_line1 of this Address.

        The first line of the address.  # noqa: E501

        :param address_line1: The address_line1 of this Address.  # noqa: E501
        :type: str
        """
        if (self._configuration.client_side_validation and
                address_line1 is not None and len(address_line1) > 60):
            raise ValueError("Invalid value for `address_line1`, length must be less than or equal to `60`")  # noqa: E501
        if (self._configuration.client_side_validation and
                address_line1 is not None and len(address_line1) < 1):
            raise ValueError("Invalid value for `address_line1`, length must be greater than or equal to `1`")  # noqa: E501

        self._address_line1 = address_line1

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

        Additional address information, if required.  # noqa: E501

        :return: The address_line2 of this Address.  # noqa: E501
        :rtype: str
        """
        return self._address_line2

    @address_line2.setter
    def address_line2(self, address_line2):
        """Sets the address_line2 of this Address.

        Additional address information, if required.  # noqa: E501

        :param address_line2: The address_line2 of this Address.  # noqa: E501
        :type: str
        """
        if (self._configuration.client_side_validation and
                address_line2 is not None and len(address_line2) > 60):
            raise ValueError("Invalid value for `address_line2`, length must be less than or equal to `60`")  # noqa: E501
        if (self._configuration.client_side_validation and
                address_line2 is not None and len(address_line2) < 1):
            raise ValueError("Invalid value for `address_line2`, length must be greater than or equal to `1`")  # noqa: E501

        self._address_line2 = address_line2

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

        Additional address information, if required.  # noqa: E501

        :return: The address_line3 of this Address.  # noqa: E501
        :rtype: str
        """
        return self._address_line3

    @address_line3.setter
    def address_line3(self, address_line3):
        """Sets the address_line3 of this Address.

        Additional address information, if required.  # noqa: E501

        :param address_line3: The address_line3 of this Address.  # noqa: E501
        :type: str
        """
        if (self._configuration.client_side_validation and
                address_line3 is not None and len(address_line3) > 60):
            raise ValueError("Invalid value for `address_line3`, length must be less than or equal to `60`")  # noqa: E501
        if (self._configuration.client_side_validation and
                address_line3 is not None and len(address_line3) < 1):
            raise ValueError("Invalid value for `address_line3`, length must be greater than or equal to `1`")  # noqa: E501

        self._address_line3 = address_line3

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

        The district or state where the person, business, or institution is located.  # noqa: E501

        :return: The district of this Address.  # noqa: E501
        :rtype: str
        """
        return self._district

    @district.setter
    def district(self, district):
        """Sets the district of this Address.

        The district or state where the person, business, or institution is located.  # noqa: E501

        :param district: The district of this Address.  # noqa: E501
        :type: str
        """

        self._district = district

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

        The municiplaity where the person, business, or institution is located.  # noqa: E501

        :return: The municipality of this Address.  # noqa: E501
        :rtype: str
        """
        return self._municipality

    @municipality.setter
    def municipality(self, municipality):
        """Sets the municipality of this Address.

        The municiplaity where the person, business, or institution is located.  # noqa: E501

        :param municipality: The municipality of this Address.  # noqa: E501
        :type: str
        """

        self._municipality = municipality

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

        The state or region where the person, business, or institution is located.  # noqa: E501

        :return: The state of this Address.  # noqa: E501
        :rtype: str
        """
        return self._state

    @state.setter
    def state(self, state):
        """Sets the state of this Address.

        The state or region where the person, business, or institution is located.  # noqa: E501

        :param state: The state of this Address.  # noqa: E501
        :type: str
        """

        self._state = state

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

        The city where the person, business, or institution is located.  # noqa: E501

        :return: The city of this Address.  # noqa: E501
        :rtype: str
        """
        return self._city

    @city.setter
    def city(self, city):
        """Sets the city of this Address.

        The city where the person, business, or institution is located.  # noqa: E501

        :param city: The city of this Address.  # noqa: E501
        :type: str
        """
        if (self._configuration.client_side_validation and
                city is not None and len(city) > 50):
            raise ValueError("Invalid value for `city`, length must be less than or equal to `50`")  # noqa: E501
        if (self._configuration.client_side_validation and
                city is not None and len(city) < 1):
            raise ValueError("Invalid value for `city`, length must be greater than or equal to `1`")  # noqa: E501

        self._city = city

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

        The two digit country code. In ISO 3166-1 alpha-2 format.  # noqa: E501

        :return: The country_code of this Address.  # noqa: E501
        :rtype: str
        """
        return self._country_code

    @country_code.setter
    def country_code(self, country_code):
        """Sets the country_code of this Address.

        The two digit country code. In ISO 3166-1 alpha-2 format.  # noqa: E501

        :param country_code: The country_code of this Address.  # noqa: E501
        :type: str
        """
        if (self._configuration.client_side_validation and
                country_code is not None and len(country_code) > 2):
            raise ValueError("Invalid value for `country_code`, length must be less than or equal to `2`")  # noqa: E501
        if (self._configuration.client_side_validation and
                country_code is not None and len(country_code) < 2):
            raise ValueError("Invalid value for `country_code`, length must be greater than or equal to `2`")  # noqa: E501

        self._country_code = country_code

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

        The postal code of the address. It contains a series of letters or digits or both, sometimes including spaces or punctuation.  # noqa: E501

        :return: The postal_code of this Address.  # noqa: E501
        :rtype: str
        """
        return self._postal_code

    @postal_code.setter
    def postal_code(self, postal_code):
        """Sets the postal_code of this Address.

        The postal code of the address. It contains a series of letters or digits or both, sometimes including spaces or punctuation.  # noqa: E501

        :param postal_code: The postal_code of this Address.  # noqa: E501
        :type: str
        """
        if self._configuration.client_side_validation and postal_code is None:
            raise ValueError("Invalid value for `postal_code`, must not be `None`")  # noqa: E501
        if (self._configuration.client_side_validation and
                postal_code is not None and len(postal_code) > 20):
            raise ValueError("Invalid value for `postal_code`, length must be less than or equal to `20`")  # noqa: E501
        if (self._configuration.client_side_validation and
                postal_code is not None and len(postal_code) < 1):
            raise ValueError("Invalid value for `postal_code`, length must be greater than or equal to `1`")  # noqa: E501

        self._postal_code = postal_code

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

        The email address of the contact associated with the address.  # noqa: E501

        :return: The email of this Address.  # noqa: E501
        :rtype: str
        """
        return self._email

    @email.setter
    def email(self, email):
        """Sets the email of this Address.

        The email address of the contact associated with the address.  # noqa: E501

        :param email: The email of this Address.  # noqa: E501
        :type: str
        """
        if (self._configuration.client_side_validation and
                email is not None and len(email) > 64):
            raise ValueError("Invalid value for `email`, length must be less than or equal to `64`")  # noqa: E501

        self._email = email

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

        The email cc addresses of the contact associated with the address.  # noqa: E501

        :return: The copy_emails of this Address.  # noqa: E501
        :rtype: List[str]
        """
        return self._copy_emails

    @copy_emails.setter
    def copy_emails(self, copy_emails):
        """Sets the copy_emails of this Address.

        The email cc addresses of the contact associated with the address.  # noqa: E501

        :param copy_emails: The copy_emails of this Address.  # noqa: E501
        :type: List[str]
        """
        if (self._configuration.client_side_validation and
                copy_emails is not None and len(copy_emails) > 2):
            raise ValueError("Invalid value for `copy_emails`, number of items must be less than or equal to `2`")  # noqa: E501

        self._copy_emails = copy_emails

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

        The phone number of the person, business, or institution located at the address.  # noqa: E501

        :return: The phone_number of this Address.  # noqa: E501
        :rtype: str
        """
        return self._phone_number

    @phone_number.setter
    def phone_number(self, phone_number):
        """Sets the phone_number of this Address.

        The phone number of the person, business, or institution located at the address.  # noqa: E501

        :param phone_number: The phone_number of this Address.  # noqa: E501
        :type: str
        """
        if (self._configuration.client_side_validation and
                phone_number is not None and len(phone_number) > 20):
            raise ValueError("Invalid value for `phone_number`, length must be less than or equal to `20`")  # noqa: E501
        if (self._configuration.client_side_validation and
                phone_number is not None and len(phone_number) < 1):
            raise ValueError("Invalid value for `phone_number`, length must be greater than or equal to `1`")  # noqa: E501

        self._phone_number = phone_number

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

        The type of address.  # noqa: E501

        :return: The address_type of this Address.  # noqa: E501
        :rtype: str
        """
        return self._address_type

    @address_type.setter
    def address_type(self, address_type):
        """Sets the address_type of this Address.

        The type of address.  # noqa: E501

        :param address_type: The address_type of this Address.  # noqa: E501
        :type: str
        """
        if (self._configuration.client_side_validation and
                address_type is not None and len(address_type) > 20):
            raise ValueError("Invalid value for `address_type`, length must be less than or equal to `20`")  # noqa: E501
        if (self._configuration.client_side_validation and
                address_type is not None and len(address_type) < 1):
            raise ValueError("Invalid value for `address_type`, length must be greater than or equal to `1`")  # noqa: E501

        self._address_type = address_type

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

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