# coding: utf-8

"""
    Lotus API

    Lotus is an open-core pricing and billing engine. We enable API companies to automate and optimize their custom usage-based pricing for any metric.  # noqa: E501

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

import pprint
import re  # noqa: F401

import six

class AddressRequest(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 = {
        'city': 'str',
        'country': 'str',
        'line1': 'str',
        'line2': 'str',
        'postal_code': 'str',
        'state': 'str'
    }

    attribute_map = {
        'city': 'city',
        'country': 'country',
        'line1': 'line1',
        'line2': 'line2',
        'postal_code': 'postal_code',
        'state': 'state'
    }

    def __init__(self, city=None, country=None, line1=None, line2=None, postal_code=None, state=None):  # noqa: E501
        """AddressRequest - a model defined in Swagger"""  # noqa: E501
        self._city = None
        self._country = None
        self._line1 = None
        self._line2 = None
        self._postal_code = None
        self._state = None
        self.discriminator = None
        self.city = city
        self.country = country
        self.line1 = line1
        if line2 is not None:
            self.line2 = line2
        self.postal_code = postal_code
        if state is not None:
            self.state = state

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

        City, district, suburb, town, or village  # noqa: E501

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

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

        City, district, suburb, town, or village  # noqa: E501

        :param city: The city of this AddressRequest.  # noqa: E501
        :type: str
        """
        if city is None:
            raise ValueError("Invalid value for `city`, must not be `None`")  # noqa: E501

        self._city = city

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

        Two-letter country code (ISO 3166-1 alpha-2)  * `AW` - Aruba * `AF` - Afghanistan * `AO` - Angola * `AI` - Anguilla * `AX` - Åland Islands * `AL` - Albania * `AD` - Andorra * `AE` - United Arab Emirates * `AR` - Argentina * `AM` - Armenia * `AS` - American Samoa * `AQ` - Antarctica * `TF` - French Southern Territories * `AG` - Antigua and Barbuda * `AU` - Australia * `AT` - Austria * `AZ` - Azerbaijan * `BI` - Burundi * `BE` - Belgium * `BJ` - Benin * `BQ` - Bonaire, Sint Eustatius and Saba * `BF` - Burkina Faso * `BD` - Bangladesh * `BG` - Bulgaria * `BH` - Bahrain * `BS` - Bahamas * `BA` - Bosnia and Herzegovina * `BL` - Saint Barthélemy * `BY` - Belarus * `BZ` - Belize * `BM` - Bermuda * `BO` - Bolivia, Plurinational State of * `BR` - Brazil * `BB` - Barbados * `BN` - Brunei Darussalam * `BT` - Bhutan * `BV` - Bouvet Island * `BW` - Botswana * `CF` - Central African Republic * `CA` - Canada * `CC` - Cocos (Keeling) Islands * `CH` - Switzerland * `CL` - Chile * `CN` - China * `CI` - Côte d'Ivoire * `CM` - Cameroon * `CD` - Congo, The Democratic Republic of the * `CG` - Congo * `CK` - Cook Islands * `CO` - Colombia * `KM` - Comoros * `CV` - Cabo Verde * `CR` - Costa Rica * `CU` - Cuba * `CW` - Curaçao * `CX` - Christmas Island * `KY` - Cayman Islands * `CY` - Cyprus * `CZ` - Czechia * `DE` - Germany * `DJ` - Djibouti * `DM` - Dominica * `DK` - Denmark * `DO` - Dominican Republic * `DZ` - Algeria * `EC` - Ecuador * `EG` - Egypt * `ER` - Eritrea * `EH` - Western Sahara * `ES` - Spain * `EE` - Estonia * `ET` - Ethiopia * `FI` - Finland * `FJ` - Fiji * `FK` - Falkland Islands (Malvinas) * `FR` - France * `FO` - Faroe Islands * `FM` - Micronesia, Federated States of * `GA` - Gabon * `GB` - United Kingdom * `GE` - Georgia * `GG` - Guernsey * `GH` - Ghana * `GI` - Gibraltar * `GN` - Guinea * `GP` - Guadeloupe * `GM` - Gambia * `GW` - Guinea-Bissau * `GQ` - Equatorial Guinea * `GR` - Greece * `GD` - Grenada * `GL` - Greenland * `GT` - Guatemala * `GF` - French Guiana * `GU` - Guam * `GY` - Guyana * `HK` - Hong Kong * `HM` - Heard Island and McDonald Islands * `HN` - Honduras * `HR` - Croatia * `HT` - Haiti * `HU` - Hungary * `ID` - Indonesia * `IM` - Isle of Man * `IN` - India * `IO` - British Indian Ocean Territory * `IE` - Ireland * `IR` - Iran, Islamic Republic of * `IQ` - Iraq * `IS` - Iceland * `IL` - Israel * `IT` - Italy * `JM` - Jamaica * `JE` - Jersey * `JO` - Jordan * `JP` - Japan * `KZ` - Kazakhstan * `KE` - Kenya * `KG` - Kyrgyzstan * `KH` - Cambodia * `KI` - Kiribati * `KN` - Saint Kitts and Nevis * `KR` - Korea, Republic of * `KW` - Kuwait * `LA` - Lao People's Democratic Republic * `LB` - Lebanon * `LR` - Liberia * `LY` - Libya * `LC` - Saint Lucia * `LI` - Liechtenstein * `LK` - Sri Lanka * `LS` - Lesotho * `LT` - Lithuania * `LU` - Luxembourg * `LV` - Latvia * `MO` - Macao * `MF` - Saint Martin (French part) * `MA` - Morocco * `MC` - Monaco * `MD` - Moldova, Republic of * `MG` - Madagascar * `MV` - Maldives * `MX` - Mexico * `MH` - Marshall Islands * `MK` - North Macedonia * `ML` - Mali * `MT` - Malta * `MM` - Myanmar * `ME` - Montenegro * `MN` - Mongolia * `MP` - Northern Mariana Islands * `MZ` - Mozambique * `MR` - Mauritania * `MS` - Montserrat * `MQ` - Martinique * `MU` - Mauritius * `MW` - Malawi * `MY` - Malaysia * `YT` - Mayotte * `NA` - Namibia * `NC` - New Caledonia * `NE` - Niger * `NF` - Norfolk Island * `NG` - Nigeria * `NI` - Nicaragua * `NU` - Niue * `NL` - Netherlands * `NO` - Norway * `NP` - Nepal * `NR` - Nauru * `NZ` - New Zealand * `OM` - Oman * `PK` - Pakistan * `PA` - Panama * `PN` - Pitcairn * `PE` - Peru * `PH` - Philippines * `PW` - Palau * `PG` - Papua New Guinea * `PL` - Poland * `PR` - Puerto Rico * `KP` - Korea, Democratic People's Republic of * `PT` - Portugal * `PY` - Paraguay * `PS` - Palestine, State of * `PF` - French Polynesia * `QA` - Qatar * `RE` - Réunion * `RO` - Romania * `RU` - Russian Federation * `RW` - Rwanda * `SA` - Saudi Arabia * `SD` - Sudan * `SN` - Senegal * `SG` - Singapore * `GS` - South Georgia and the South Sandwich Islands * `SH` - Saint Helena, Ascension and Tristan da Cunha * `SJ` - Svalbard and Jan Mayen * `SB` - Solomon Islands * `SL` - Sierra Leone * `SV` - El Salvador * `SM` - San Marino * `SO` - Somalia * `PM` - Saint Pierre and Miquelon * `RS` - Serbia * `SS` - South Sudan * `ST` - Sao Tome and Principe * `SR` - Suriname * `SK` - Slovakia * `SI` - Slovenia * `SE` - Sweden * `SZ` - Eswatini * `SX` - Sint Maarten (Dutch part) * `SC` - Seychelles * `SY` - Syrian Arab Republic * `TC` - Turks and Caicos Islands * `TD` - Chad * `TG` - Togo * `TH` - Thailand * `TJ` - Tajikistan * `TK` - Tokelau * `TM` - Turkmenistan * `TL` - Timor-Leste * `TO` - Tonga * `TT` - Trinidad and Tobago * `TN` - Tunisia * `TR` - Turkey * `TV` - Tuvalu * `TW` - Taiwan, Province of China * `TZ` - Tanzania, United Republic of * `UG` - Uganda * `UA` - Ukraine * `UM` - United States Minor Outlying Islands * `UY` - Uruguay * `US` - United States * `UZ` - Uzbekistan * `VA` - Holy See (Vatican City State) * `VC` - Saint Vincent and the Grenadines * `VE` - Venezuela, Bolivarian Republic of * `VG` - Virgin Islands, British * `VI` - Virgin Islands, U.S. * `VN` - Viet Nam * `VU` - Vanuatu * `WF` - Wallis and Futuna * `WS` - Samoa * `YE` - Yemen * `ZA` - South Africa * `ZM` - Zambia * `ZW` - Zimbabwe  # noqa: E501

        :return: The country of this AddressRequest.  # noqa: E501
        :rtype: str
        """
        return self._country

    @country.setter
    def country(self, country):
        """Sets the country of this AddressRequest.

        Two-letter country code (ISO 3166-1 alpha-2)  * `AW` - Aruba * `AF` - Afghanistan * `AO` - Angola * `AI` - Anguilla * `AX` - Åland Islands * `AL` - Albania * `AD` - Andorra * `AE` - United Arab Emirates * `AR` - Argentina * `AM` - Armenia * `AS` - American Samoa * `AQ` - Antarctica * `TF` - French Southern Territories * `AG` - Antigua and Barbuda * `AU` - Australia * `AT` - Austria * `AZ` - Azerbaijan * `BI` - Burundi * `BE` - Belgium * `BJ` - Benin * `BQ` - Bonaire, Sint Eustatius and Saba * `BF` - Burkina Faso * `BD` - Bangladesh * `BG` - Bulgaria * `BH` - Bahrain * `BS` - Bahamas * `BA` - Bosnia and Herzegovina * `BL` - Saint Barthélemy * `BY` - Belarus * `BZ` - Belize * `BM` - Bermuda * `BO` - Bolivia, Plurinational State of * `BR` - Brazil * `BB` - Barbados * `BN` - Brunei Darussalam * `BT` - Bhutan * `BV` - Bouvet Island * `BW` - Botswana * `CF` - Central African Republic * `CA` - Canada * `CC` - Cocos (Keeling) Islands * `CH` - Switzerland * `CL` - Chile * `CN` - China * `CI` - Côte d'Ivoire * `CM` - Cameroon * `CD` - Congo, The Democratic Republic of the * `CG` - Congo * `CK` - Cook Islands * `CO` - Colombia * `KM` - Comoros * `CV` - Cabo Verde * `CR` - Costa Rica * `CU` - Cuba * `CW` - Curaçao * `CX` - Christmas Island * `KY` - Cayman Islands * `CY` - Cyprus * `CZ` - Czechia * `DE` - Germany * `DJ` - Djibouti * `DM` - Dominica * `DK` - Denmark * `DO` - Dominican Republic * `DZ` - Algeria * `EC` - Ecuador * `EG` - Egypt * `ER` - Eritrea * `EH` - Western Sahara * `ES` - Spain * `EE` - Estonia * `ET` - Ethiopia * `FI` - Finland * `FJ` - Fiji * `FK` - Falkland Islands (Malvinas) * `FR` - France * `FO` - Faroe Islands * `FM` - Micronesia, Federated States of * `GA` - Gabon * `GB` - United Kingdom * `GE` - Georgia * `GG` - Guernsey * `GH` - Ghana * `GI` - Gibraltar * `GN` - Guinea * `GP` - Guadeloupe * `GM` - Gambia * `GW` - Guinea-Bissau * `GQ` - Equatorial Guinea * `GR` - Greece * `GD` - Grenada * `GL` - Greenland * `GT` - Guatemala * `GF` - French Guiana * `GU` - Guam * `GY` - Guyana * `HK` - Hong Kong * `HM` - Heard Island and McDonald Islands * `HN` - Honduras * `HR` - Croatia * `HT` - Haiti * `HU` - Hungary * `ID` - Indonesia * `IM` - Isle of Man * `IN` - India * `IO` - British Indian Ocean Territory * `IE` - Ireland * `IR` - Iran, Islamic Republic of * `IQ` - Iraq * `IS` - Iceland * `IL` - Israel * `IT` - Italy * `JM` - Jamaica * `JE` - Jersey * `JO` - Jordan * `JP` - Japan * `KZ` - Kazakhstan * `KE` - Kenya * `KG` - Kyrgyzstan * `KH` - Cambodia * `KI` - Kiribati * `KN` - Saint Kitts and Nevis * `KR` - Korea, Republic of * `KW` - Kuwait * `LA` - Lao People's Democratic Republic * `LB` - Lebanon * `LR` - Liberia * `LY` - Libya * `LC` - Saint Lucia * `LI` - Liechtenstein * `LK` - Sri Lanka * `LS` - Lesotho * `LT` - Lithuania * `LU` - Luxembourg * `LV` - Latvia * `MO` - Macao * `MF` - Saint Martin (French part) * `MA` - Morocco * `MC` - Monaco * `MD` - Moldova, Republic of * `MG` - Madagascar * `MV` - Maldives * `MX` - Mexico * `MH` - Marshall Islands * `MK` - North Macedonia * `ML` - Mali * `MT` - Malta * `MM` - Myanmar * `ME` - Montenegro * `MN` - Mongolia * `MP` - Northern Mariana Islands * `MZ` - Mozambique * `MR` - Mauritania * `MS` - Montserrat * `MQ` - Martinique * `MU` - Mauritius * `MW` - Malawi * `MY` - Malaysia * `YT` - Mayotte * `NA` - Namibia * `NC` - New Caledonia * `NE` - Niger * `NF` - Norfolk Island * `NG` - Nigeria * `NI` - Nicaragua * `NU` - Niue * `NL` - Netherlands * `NO` - Norway * `NP` - Nepal * `NR` - Nauru * `NZ` - New Zealand * `OM` - Oman * `PK` - Pakistan * `PA` - Panama * `PN` - Pitcairn * `PE` - Peru * `PH` - Philippines * `PW` - Palau * `PG` - Papua New Guinea * `PL` - Poland * `PR` - Puerto Rico * `KP` - Korea, Democratic People's Republic of * `PT` - Portugal * `PY` - Paraguay * `PS` - Palestine, State of * `PF` - French Polynesia * `QA` - Qatar * `RE` - Réunion * `RO` - Romania * `RU` - Russian Federation * `RW` - Rwanda * `SA` - Saudi Arabia * `SD` - Sudan * `SN` - Senegal * `SG` - Singapore * `GS` - South Georgia and the South Sandwich Islands * `SH` - Saint Helena, Ascension and Tristan da Cunha * `SJ` - Svalbard and Jan Mayen * `SB` - Solomon Islands * `SL` - Sierra Leone * `SV` - El Salvador * `SM` - San Marino * `SO` - Somalia * `PM` - Saint Pierre and Miquelon * `RS` - Serbia * `SS` - South Sudan * `ST` - Sao Tome and Principe * `SR` - Suriname * `SK` - Slovakia * `SI` - Slovenia * `SE` - Sweden * `SZ` - Eswatini * `SX` - Sint Maarten (Dutch part) * `SC` - Seychelles * `SY` - Syrian Arab Republic * `TC` - Turks and Caicos Islands * `TD` - Chad * `TG` - Togo * `TH` - Thailand * `TJ` - Tajikistan * `TK` - Tokelau * `TM` - Turkmenistan * `TL` - Timor-Leste * `TO` - Tonga * `TT` - Trinidad and Tobago * `TN` - Tunisia * `TR` - Turkey * `TV` - Tuvalu * `TW` - Taiwan, Province of China * `TZ` - Tanzania, United Republic of * `UG` - Uganda * `UA` - Ukraine * `UM` - United States Minor Outlying Islands * `UY` - Uruguay * `US` - United States * `UZ` - Uzbekistan * `VA` - Holy See (Vatican City State) * `VC` - Saint Vincent and the Grenadines * `VE` - Venezuela, Bolivarian Republic of * `VG` - Virgin Islands, British * `VI` - Virgin Islands, U.S. * `VN` - Viet Nam * `VU` - Vanuatu * `WF` - Wallis and Futuna * `WS` - Samoa * `YE` - Yemen * `ZA` - South Africa * `ZM` - Zambia * `ZW` - Zimbabwe  # noqa: E501

        :param country: The country of this AddressRequest.  # noqa: E501
        :type: str
        """
        if country is None:
            raise ValueError("Invalid value for `country`, must not be `None`")  # noqa: E501
        allowed_values = ["AW", "AF", "AO", "AI", "AX", "AL", "AD", "AE", "AR", "AM", "AS", "AQ", "TF", "AG", "AU", "AT", "AZ", "BI", "BE", "BJ", "BQ", "BF", "BD", "BG", "BH", "BS", "BA", "BL", "BY", "BZ", "BM", "BO", "BR", "BB", "BN", "BT", "BV", "BW", "CF", "CA", "CC", "CH", "CL", "CN", "CI", "CM", "CD", "CG", "CK", "CO", "KM", "CV", "CR", "CU", "CW", "CX", "KY", "CY", "CZ", "DE", "DJ", "DM", "DK", "DO", "DZ", "EC", "EG", "ER", "EH", "ES", "EE", "ET", "FI", "FJ", "FK", "FR", "FO", "FM", "GA", "GB", "GE", "GG", "GH", "GI", "GN", "GP", "GM", "GW", "GQ", "GR", "GD", "GL", "GT", "GF", "GU", "GY", "HK", "HM", "HN", "HR", "HT", "HU", "ID", "IM", "IN", "IO", "IE", "IR", "IQ", "IS", "IL", "IT", "JM", "JE", "JO", "JP", "KZ", "KE", "KG", "KH", "KI", "KN", "KR", "KW", "LA", "LB", "LR", "LY", "LC", "LI", "LK", "LS", "LT", "LU", "LV", "MO", "MF", "MA", "MC", "MD", "MG", "MV", "MX", "MH", "MK", "ML", "MT", "MM", "ME", "MN", "MP", "MZ", "MR", "MS", "MQ", "MU", "MW", "MY", "YT", "NA", "NC", "NE", "NF", "NG", "NI", "NU", "NL", "NO", "NP", "NR", "NZ", "OM", "PK", "PA", "PN", "PE", "PH", "PW", "PG", "PL", "PR", "KP", "PT", "PY", "PS", "PF", "QA", "RE", "RO", "RU", "RW", "SA", "SD", "SN", "SG", "GS", "SH", "SJ", "SB", "SL", "SV", "SM", "SO", "PM", "RS", "SS", "ST", "SR", "SK", "SI", "SE", "SZ", "SX", "SC", "SY", "TC", "TD", "TG", "TH", "TJ", "TK", "TM", "TL", "TO", "TT", "TN", "TR", "TV", "TW", "TZ", "UG", "UA", "UM", "UY", "US", "UZ", "VA", "VC", "VE", "VG", "VI", "VN", "VU", "WF", "WS", "YE", "ZA", "ZM", "ZW"]  # noqa: E501
        if country not in allowed_values:
            raise ValueError(
                "Invalid value for `country` ({0}), must be one of {1}"  # noqa: E501
                .format(country, allowed_values)
            )

        self._country = country

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

        Address line 1 (e.g., street, PO Box, or company name)  # noqa: E501

        :return: The line1 of this AddressRequest.  # noqa: E501
        :rtype: str
        """
        return self._line1

    @line1.setter
    def line1(self, line1):
        """Sets the line1 of this AddressRequest.

        Address line 1 (e.g., street, PO Box, or company name)  # noqa: E501

        :param line1: The line1 of this AddressRequest.  # noqa: E501
        :type: str
        """
        if line1 is None:
            raise ValueError("Invalid value for `line1`, must not be `None`")  # noqa: E501

        self._line1 = line1

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

        Address line 2 (e.g., apartment, suite, unit, or building)  # noqa: E501

        :return: The line2 of this AddressRequest.  # noqa: E501
        :rtype: str
        """
        return self._line2

    @line2.setter
    def line2(self, line2):
        """Sets the line2 of this AddressRequest.

        Address line 2 (e.g., apartment, suite, unit, or building)  # noqa: E501

        :param line2: The line2 of this AddressRequest.  # noqa: E501
        :type: str
        """

        self._line2 = line2

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

        ZIP or postal code  # noqa: E501

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

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

        ZIP or postal code  # noqa: E501

        :param postal_code: The postal_code of this AddressRequest.  # noqa: E501
        :type: str
        """
        if postal_code is None:
            raise ValueError("Invalid value for `postal_code`, must not be `None`")  # noqa: E501

        self._postal_code = postal_code

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

        State, county, province, or region  # noqa: E501

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

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

        State, county, province, or region  # noqa: E501

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

        self._state = state

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

        return self.__dict__ == other.__dict__

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