# coding: utf-8

from __future__ import absolute_import
from datetime import date, datetime  # noqa: F401

from typing import List, Dict  # noqa: F401

from swagger_server.models.base_model_ import Model
from swagger_server.models.country import Country  # noqa: F401,E501
from swagger_server import util


class Address(Model):
    """NOTE: This class is auto generated by the swagger code generator program.

    Do not edit the class manually.
    """
    def __init__(self, street_address: str=None, street: str=None, house_number: float=None, house_number_addition: str=None, address_additional_info: str=None, area_reference: str=None, city: str=None, province: str=None, state: str=None, postal_code: str=None, country: Country=None):  # noqa: E501
        """Address - a model defined in Swagger

        :param street_address: The street_address of this Address.  # noqa: E501
        :type street_address: str
        :param street: The street of this Address.  # noqa: E501
        :type street: str
        :param house_number: The house_number of this Address.  # noqa: E501
        :type house_number: float
        :param house_number_addition: The house_number_addition of this Address.  # noqa: E501
        :type house_number_addition: str
        :param address_additional_info: The address_additional_info of this Address.  # noqa: E501
        :type address_additional_info: str
        :param area_reference: The area_reference of this Address.  # noqa: E501
        :type area_reference: str
        :param city: The city of this Address.  # noqa: E501
        :type city: str
        :param province: The province of this Address.  # noqa: E501
        :type province: str
        :param state: The state of this Address.  # noqa: E501
        :type state: str
        :param postal_code: The postal_code of this Address.  # noqa: E501
        :type postal_code: str
        :param country: The country of this Address.  # noqa: E501
        :type country: Country
        """
        self.swagger_types = {
            'street_address': str,
            'street': str,
            'house_number': float,
            'house_number_addition': str,
            'address_additional_info': str,
            'area_reference': str,
            'city': str,
            'province': str,
            'state': str,
            'postal_code': str,
            'country': Country
        }

        self.attribute_map = {
            'street_address': 'streetAddress',
            'street': 'street',
            'house_number': 'houseNumber',
            'house_number_addition': 'houseNumberAddition',
            'address_additional_info': 'addressAdditionalInfo',
            'area_reference': 'areaReference',
            'city': 'city',
            'province': 'province',
            'state': 'state',
            'postal_code': 'postalCode',
            'country': 'country'
        }
        self._street_address = street_address
        self._street = street
        self._house_number = house_number
        self._house_number_addition = house_number_addition
        self._address_additional_info = address_additional_info
        self._area_reference = area_reference
        self._city = city
        self._province = province
        self._state = state
        self._postal_code = postal_code
        self._country = country

    @classmethod
    def from_dict(cls, dikt) -> 'Address':
        """Returns the dict as a model

        :param dikt: A dict.
        :type: dict
        :return: The address of this Address.  # noqa: E501
        :rtype: Address
        """
        return util.deserialize_model(dikt, cls)

    @property
    def street_address(self) -> str:
        """Gets the street_address of this Address.


        :return: The street_address of this Address.
        :rtype: str
        """
        return self._street_address

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


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

        self._street_address = street_address

    @property
    def street(self) -> str:
        """Gets the street of this Address.

        street, consistent with streetAddress  # noqa: E501

        :return: The street of this Address.
        :rtype: str
        """
        return self._street

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

        street, consistent with streetAddress  # noqa: E501

        :param street: The street of this Address.
        :type street: str
        """

        self._street = street

    @property
    def house_number(self) -> float:
        """Gets the house_number of this Address.

        house number, consistent with streetAddress  # noqa: E501

        :return: The house_number of this Address.
        :rtype: float
        """
        return self._house_number

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

        house number, consistent with streetAddress  # noqa: E501

        :param house_number: The house_number of this Address.
        :type house_number: float
        """

        self._house_number = house_number

    @property
    def house_number_addition(self) -> str:
        """Gets the house_number_addition of this Address.

        the additional part of the house number (f.x. 13bis, where 'bis' is the additional part), consistent with streetAddress  # noqa: E501

        :return: The house_number_addition of this Address.
        :rtype: str
        """
        return self._house_number_addition

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

        the additional part of the house number (f.x. 13bis, where 'bis' is the additional part), consistent with streetAddress  # noqa: E501

        :param house_number_addition: The house_number_addition of this Address.
        :type house_number_addition: str
        """

        self._house_number_addition = house_number_addition

    @property
    def address_additional_info(self) -> str:
        """Gets the address_additional_info of this Address.

        additional information to find the address (f.x. just around the corner)  # noqa: E501

        :return: The address_additional_info of this Address.
        :rtype: str
        """
        return self._address_additional_info

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

        additional information to find the address (f.x. just around the corner)  # noqa: E501

        :param address_additional_info: The address_additional_info of this Address.
        :type address_additional_info: str
        """

        self._address_additional_info = address_additional_info

    @property
    def area_reference(self) -> str:
        """Gets the area_reference of this Address.

        city or town, principal subdivision such as province, state or county, could match Content-Language  # noqa: E501

        :return: The area_reference of this Address.
        :rtype: str
        """
        return self._area_reference

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

        city or town, principal subdivision such as province, state or county, could match Content-Language  # noqa: E501

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

        self._area_reference = area_reference

    @property
    def city(self) -> str:
        """Gets the city of this Address.

        specified city or town, consistent with areaReference  # noqa: E501

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

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

        specified city or town, consistent with areaReference  # noqa: E501

        :param city: The city of this Address.
        :type city: str
        """

        self._city = city

    @property
    def province(self) -> str:
        """Gets the province of this Address.

        province or region, consistent with areaReference  # noqa: E501

        :return: The province of this Address.
        :rtype: str
        """
        return self._province

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

        province or region, consistent with areaReference  # noqa: E501

        :param province: The province of this Address.
        :type province: str
        """

        self._province = province

    @property
    def state(self) -> str:
        """Gets the state of this Address.

        state, consistent with areaReference  # noqa: E501

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

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

        state, consistent with areaReference  # noqa: E501

        :param state: The state of this Address.
        :type state: str
        """

        self._state = state

    @property
    def postal_code(self) -> str:
        """Gets the postal_code of this Address.


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

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


        :param postal_code: The postal_code of this Address.
        :type postal_code: str
        """

        self._postal_code = postal_code

    @property
    def country(self) -> Country:
        """Gets the country of this Address.


        :return: The country of this Address.
        :rtype: Country
        """
        return self._country

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


        :param country: The country of this Address.
        :type country: Country
        """

        self._country = country
