# coding: utf-8

"""
    Street Manager Street Lookup API

    See API specification Resource Guide > Street Lookup API for more information on endpoints NOTE: Swagger Editor/UI does not display all description text for enumerations and child elements, check swagger.json for full description text  # 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 StreetResponse(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 = {
        'usrn': 'float',
        'street_descriptor': 'str',
        'area': 'str',
        'town': 'str',
        'authority': 'str',
        'authority_swa_code': 'str',
        'road_category': 'float',
        'reinstatement_types': 'list[ReinstatementTypeDetails]',
        'traffic_sensitive': 'bool',
        'primary_notice_authorities': 'list[PrimaryNoticeAuthority]',
        'interest_authorities': 'list[InterestAuthority]',
        'additional_special_designations_response': 'list[AdditionalSpecialDesignationsResponse]',
        'street_line': 'AllOfStreetResponseStreetLine',
        'street_centre_point': 'AllOfStreetResponseStreetCentrePoint'
    }

    attribute_map = {
        'usrn': 'usrn',
        'street_descriptor': 'street_descriptor',
        'area': 'area',
        'town': 'town',
        'authority': 'authority',
        'authority_swa_code': 'authority_swa_code',
        'road_category': 'road_category',
        'reinstatement_types': 'reinstatement_types',
        'traffic_sensitive': 'traffic_sensitive',
        'primary_notice_authorities': 'primary_notice_authorities',
        'interest_authorities': 'interest_authorities',
        'additional_special_designations_response': 'additional_special_designations_response',
        'street_line': 'street_line',
        'street_centre_point': 'street_centre_point'
    }

    def __init__(self, usrn=None, street_descriptor=None, area=None, town=None, authority=None, authority_swa_code=None, road_category=None, reinstatement_types=None, traffic_sensitive=None, primary_notice_authorities=None, interest_authorities=None, additional_special_designations_response=None, street_line=None, street_centre_point=None):  # noqa: E501
        """StreetResponse - a model defined in Swagger"""  # noqa: E501
        self._usrn = None
        self._street_descriptor = None
        self._area = None
        self._town = None
        self._authority = None
        self._authority_swa_code = None
        self._road_category = None
        self._reinstatement_types = None
        self._traffic_sensitive = None
        self._primary_notice_authorities = None
        self._interest_authorities = None
        self._additional_special_designations_response = None
        self._street_line = None
        self._street_centre_point = None
        self.discriminator = None
        self.usrn = usrn
        self.street_descriptor = street_descriptor
        self.area = area
        self.town = town
        self.authority = authority
        self.authority_swa_code = authority_swa_code
        self.road_category = road_category
        self.reinstatement_types = reinstatement_types
        self.traffic_sensitive = traffic_sensitive
        self.primary_notice_authorities = primary_notice_authorities
        self.interest_authorities = interest_authorities
        self.additional_special_designations_response = additional_special_designations_response
        if street_line is not None:
            self.street_line = street_line
        if street_centre_point is not None:
            self.street_centre_point = street_centre_point

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


        :return: The usrn of this StreetResponse.  # noqa: E501
        :rtype: float
        """
        return self._usrn

    @usrn.setter
    def usrn(self, usrn):
        """Sets the usrn of this StreetResponse.


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

        self._usrn = usrn

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


        :return: The street_descriptor of this StreetResponse.  # noqa: E501
        :rtype: str
        """
        return self._street_descriptor

    @street_descriptor.setter
    def street_descriptor(self, street_descriptor):
        """Sets the street_descriptor of this StreetResponse.


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

        self._street_descriptor = street_descriptor

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


        :return: The area of this StreetResponse.  # noqa: E501
        :rtype: str
        """
        return self._area

    @area.setter
    def area(self, area):
        """Sets the area of this StreetResponse.


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

        self._area = area

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


        :return: The town of this StreetResponse.  # noqa: E501
        :rtype: str
        """
        return self._town

    @town.setter
    def town(self, town):
        """Sets the town of this StreetResponse.


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

        self._town = town

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


        :return: The authority of this StreetResponse.  # noqa: E501
        :rtype: str
        """
        return self._authority

    @authority.setter
    def authority(self, authority):
        """Sets the authority of this StreetResponse.


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

        self._authority = authority

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


        :return: The authority_swa_code of this StreetResponse.  # noqa: E501
        :rtype: str
        """
        return self._authority_swa_code

    @authority_swa_code.setter
    def authority_swa_code(self, authority_swa_code):
        """Sets the authority_swa_code of this StreetResponse.


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

        self._authority_swa_code = authority_swa_code

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

        DEPRECATED  # noqa: E501

        :return: The road_category of this StreetResponse.  # noqa: E501
        :rtype: float
        """
        return self._road_category

    @road_category.setter
    def road_category(self, road_category):
        """Sets the road_category of this StreetResponse.

        DEPRECATED  # noqa: E501

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

        self._road_category = road_category

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


        :return: The reinstatement_types of this StreetResponse.  # noqa: E501
        :rtype: list[ReinstatementTypeDetails]
        """
        return self._reinstatement_types

    @reinstatement_types.setter
    def reinstatement_types(self, reinstatement_types):
        """Sets the reinstatement_types of this StreetResponse.


        :param reinstatement_types: The reinstatement_types of this StreetResponse.  # noqa: E501
        :type: list[ReinstatementTypeDetails]
        """
        if reinstatement_types is None:
            raise ValueError("Invalid value for `reinstatement_types`, must not be `None`")  # noqa: E501

        self._reinstatement_types = reinstatement_types

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


        :return: The traffic_sensitive of this StreetResponse.  # noqa: E501
        :rtype: bool
        """
        return self._traffic_sensitive

    @traffic_sensitive.setter
    def traffic_sensitive(self, traffic_sensitive):
        """Sets the traffic_sensitive of this StreetResponse.


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

        self._traffic_sensitive = traffic_sensitive

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


        :return: The primary_notice_authorities of this StreetResponse.  # noqa: E501
        :rtype: list[PrimaryNoticeAuthority]
        """
        return self._primary_notice_authorities

    @primary_notice_authorities.setter
    def primary_notice_authorities(self, primary_notice_authorities):
        """Sets the primary_notice_authorities of this StreetResponse.


        :param primary_notice_authorities: The primary_notice_authorities of this StreetResponse.  # noqa: E501
        :type: list[PrimaryNoticeAuthority]
        """
        if primary_notice_authorities is None:
            raise ValueError("Invalid value for `primary_notice_authorities`, must not be `None`")  # noqa: E501

        self._primary_notice_authorities = primary_notice_authorities

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


        :return: The interest_authorities of this StreetResponse.  # noqa: E501
        :rtype: list[InterestAuthority]
        """
        return self._interest_authorities

    @interest_authorities.setter
    def interest_authorities(self, interest_authorities):
        """Sets the interest_authorities of this StreetResponse.


        :param interest_authorities: The interest_authorities of this StreetResponse.  # noqa: E501
        :type: list[InterestAuthority]
        """
        if interest_authorities is None:
            raise ValueError("Invalid value for `interest_authorities`, must not be `None`")  # noqa: E501

        self._interest_authorities = interest_authorities

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


        :return: The additional_special_designations_response of this StreetResponse.  # noqa: E501
        :rtype: list[AdditionalSpecialDesignationsResponse]
        """
        return self._additional_special_designations_response

    @additional_special_designations_response.setter
    def additional_special_designations_response(self, additional_special_designations_response):
        """Sets the additional_special_designations_response of this StreetResponse.


        :param additional_special_designations_response: The additional_special_designations_response of this StreetResponse.  # noqa: E501
        :type: list[AdditionalSpecialDesignationsResponse]
        """
        if additional_special_designations_response is None:
            raise ValueError("Invalid value for `additional_special_designations_response`, must not be `None`")  # noqa: E501

        self._additional_special_designations_response = additional_special_designations_response

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


        :return: The street_line of this StreetResponse.  # noqa: E501
        :rtype: AllOfStreetResponseStreetLine
        """
        return self._street_line

    @street_line.setter
    def street_line(self, street_line):
        """Sets the street_line of this StreetResponse.


        :param street_line: The street_line of this StreetResponse.  # noqa: E501
        :type: AllOfStreetResponseStreetLine
        """

        self._street_line = street_line

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


        :return: The street_centre_point of this StreetResponse.  # noqa: E501
        :rtype: AllOfStreetResponseStreetCentrePoint
        """
        return self._street_centre_point

    @street_centre_point.setter
    def street_centre_point(self, street_centre_point):
        """Sets the street_centre_point of this StreetResponse.


        :param street_centre_point: The street_centre_point of this StreetResponse.  # noqa: E501
        :type: AllOfStreetResponseStreetCentrePoint
        """

        self._street_centre_point = street_centre_point

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

        return self.__dict__ == other.__dict__

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