# coding: utf-8

"""
    Trip Planner

    No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)  # noqa: E501

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


import pprint
import re  # noqa: F401

import six

from swagger_client.models.trip_request_response_journey_leg_stop_footpath_info_footpath_elem_location import TripRequestResponseJourneyLegStopFootpathInfoFootpathElemLocation  # noqa: F401,E501


class TripRequestResponseJourneyLegStopFootpathInfoFootpathElem(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 = {
        'description': 'str',
        'type': 'str',
        'level_from': 'int',
        'level_to': 'int',
        'level': 'str',
        'origin': 'TripRequestResponseJourneyLegStopFootpathInfoFootpathElemLocation',
        'destination': 'TripRequestResponseJourneyLegStopFootpathInfoFootpathElemLocation'
    }

    attribute_map = {
        'description': 'description',
        'type': 'type',
        'level_from': 'levelFrom',
        'level_to': 'levelTo',
        'level': 'level',
        'origin': 'origin',
        'destination': 'destination'
    }

    def __init__(self, description=None, type=None, level_from=None, level_to=None, level=None, origin=None, destination=None):  # noqa: E501
        """TripRequestResponseJourneyLegStopFootpathInfoFootpathElem - a model defined in Swagger"""  # noqa: E501

        self._description = None
        self._type = None
        self._level_from = None
        self._level_to = None
        self._level = None
        self._origin = None
        self._destination = None
        self.discriminator = None

        if description is not None:
            self.description = description
        if type is not None:
            self.type = type
        if level_from is not None:
            self.level_from = level_from
        if level_to is not None:
            self.level_to = level_to
        if level is not None:
            self.level = level
        if origin is not None:
            self.origin = origin
        if destination is not None:
            self.destination = destination

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

        Contains additional information about this instruction, but is generally unused.   # noqa: E501

        :return: The description of this TripRequestResponseJourneyLegStopFootpathInfoFootpathElem.  # noqa: E501
        :rtype: str
        """
        return self._description

    @description.setter
    def description(self, description):
        """Sets the description of this TripRequestResponseJourneyLegStopFootpathInfoFootpathElem.

        Contains additional information about this instruction, but is generally unused.   # noqa: E501

        :param description: The description of this TripRequestResponseJourneyLegStopFootpathInfoFootpathElem.  # noqa: E501
        :type: str
        """

        self._description = description

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

        This indicates the type of \"terrain\" for this instruction. `LEVEL` indicates a normal flat surface.   # noqa: E501

        :return: The type of this TripRequestResponseJourneyLegStopFootpathInfoFootpathElem.  # noqa: E501
        :rtype: str
        """
        return self._type

    @type.setter
    def type(self, type):
        """Sets the type of this TripRequestResponseJourneyLegStopFootpathInfoFootpathElem.

        This indicates the type of \"terrain\" for this instruction. `LEVEL` indicates a normal flat surface.   # noqa: E501

        :param type: The type of this TripRequestResponseJourneyLegStopFootpathInfoFootpathElem.  # noqa: E501
        :type: str
        """
        allowed_values = ["ESCALATOR", "ELEVATOR", "STAIRS", "LEVEL", "RAMP"]  # noqa: E501
        if type not in allowed_values:
            raise ValueError(
                "Invalid value for `type` ({0}), must be one of {1}"  # noqa: E501
                .format(type, allowed_values)
            )

        self._type = type

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

        Indicates the floor number the instruction is starting from. If the `type` is `LEVEL`, then the `levelFrom` and `levelTo` values should be the same.   # noqa: E501

        :return: The level_from of this TripRequestResponseJourneyLegStopFootpathInfoFootpathElem.  # noqa: E501
        :rtype: int
        """
        return self._level_from

    @level_from.setter
    def level_from(self, level_from):
        """Sets the level_from of this TripRequestResponseJourneyLegStopFootpathInfoFootpathElem.

        Indicates the floor number the instruction is starting from. If the `type` is `LEVEL`, then the `levelFrom` and `levelTo` values should be the same.   # noqa: E501

        :param level_from: The level_from of this TripRequestResponseJourneyLegStopFootpathInfoFootpathElem.  # noqa: E501
        :type: int
        """

        self._level_from = level_from

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

        Indicates the floor number the instruction ends of. If the `type` is `LEVEL`, then the `levelFrom` and `levelTo` values should be the same.   # noqa: E501

        :return: The level_to of this TripRequestResponseJourneyLegStopFootpathInfoFootpathElem.  # noqa: E501
        :rtype: int
        """
        return self._level_to

    @level_to.setter
    def level_to(self, level_to):
        """Sets the level_to of this TripRequestResponseJourneyLegStopFootpathInfoFootpathElem.

        Indicates the floor number the instruction ends of. If the `type` is `LEVEL`, then the `levelFrom` and `levelTo` values should be the same.   # noqa: E501

        :param level_to: The level_to of this TripRequestResponseJourneyLegStopFootpathInfoFootpathElem.  # noqa: E501
        :type: int
        """

        self._level_to = level_to

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

        Indicates the direction of travel for this instruction. Generally a ramp, escalator or stairs will go `UP` or `DOWN` to a different floor. This value will be `LEVEL` when the `type` field is also `LEVEL`.   # noqa: E501

        :return: The level of this TripRequestResponseJourneyLegStopFootpathInfoFootpathElem.  # noqa: E501
        :rtype: str
        """
        return self._level

    @level.setter
    def level(self, level):
        """Sets the level of this TripRequestResponseJourneyLegStopFootpathInfoFootpathElem.

        Indicates the direction of travel for this instruction. Generally a ramp, escalator or stairs will go `UP` or `DOWN` to a different floor. This value will be `LEVEL` when the `type` field is also `LEVEL`.   # noqa: E501

        :param level: The level of this TripRequestResponseJourneyLegStopFootpathInfoFootpathElem.  # noqa: E501
        :type: str
        """
        allowed_values = ["DOWN", "LEVEL", "UP"]  # noqa: E501
        if level not in allowed_values:
            raise ValueError(
                "Invalid value for `level` ({0}), must be one of {1}"  # noqa: E501
                .format(level, allowed_values)
            )

        self._level = level

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

        Indicates the starting location for this leg, in terms of locations in the system such as stops or places of interest. Typically, since these instructions indicate how to travel within a stop or station, the `origin` and `destination` will both reference the same stop, but the coordinate will be specific to this instruction.    # noqa: E501

        :return: The origin of this TripRequestResponseJourneyLegStopFootpathInfoFootpathElem.  # noqa: E501
        :rtype: TripRequestResponseJourneyLegStopFootpathInfoFootpathElemLocation
        """
        return self._origin

    @origin.setter
    def origin(self, origin):
        """Sets the origin of this TripRequestResponseJourneyLegStopFootpathInfoFootpathElem.

        Indicates the starting location for this leg, in terms of locations in the system such as stops or places of interest. Typically, since these instructions indicate how to travel within a stop or station, the `origin` and `destination` will both reference the same stop, but the coordinate will be specific to this instruction.    # noqa: E501

        :param origin: The origin of this TripRequestResponseJourneyLegStopFootpathInfoFootpathElem.  # noqa: E501
        :type: TripRequestResponseJourneyLegStopFootpathInfoFootpathElemLocation
        """

        self._origin = origin

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

        Indicates the starting location for this leg, in terms of locations in the system such as stops or places of interest. Typically, since these instructions indicate how to travel within a stop or station, the `origin` and `destination` will both reference the same stop, but the coordinate will be specific to this instruction.    # noqa: E501

        :return: The destination of this TripRequestResponseJourneyLegStopFootpathInfoFootpathElem.  # noqa: E501
        :rtype: TripRequestResponseJourneyLegStopFootpathInfoFootpathElemLocation
        """
        return self._destination

    @destination.setter
    def destination(self, destination):
        """Sets the destination of this TripRequestResponseJourneyLegStopFootpathInfoFootpathElem.

        Indicates the starting location for this leg, in terms of locations in the system such as stops or places of interest. Typically, since these instructions indicate how to travel within a stop or station, the `origin` and `destination` will both reference the same stop, but the coordinate will be specific to this instruction.    # noqa: E501

        :param destination: The destination of this TripRequestResponseJourneyLegStopFootpathInfoFootpathElem.  # noqa: E501
        :type: TripRequestResponseJourneyLegStopFootpathInfoFootpathElemLocation
        """

        self._destination = destination

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

        return self.__dict__ == other.__dict__

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