# 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.place import Place  # noqa: F401,E501
from swagger_server.models.support_request import SupportRequest  # noqa: F401,E501
from swagger_server import util


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

    Do not edit the class manually.
    """
    def __init__(self, id: str=None, support_type: str=None, location: Place=None, time: datetime=None, priority: str=None, contact_information_end_user: str=None, comment: str=None, requested_response_time: float=None, status: str=None, time_to_resolution: int=None, order: int=None):  # noqa: E501
        """SupportStatus - a model defined in Swagger

        :param id: The id of this SupportStatus.  # noqa: E501
        :type id: str
        :param support_type: The support_type of this SupportStatus.  # noqa: E501
        :type support_type: str
        :param location: The location of this SupportStatus.  # noqa: E501
        :type location: Place
        :param time: The time of this SupportStatus.  # noqa: E501
        :type time: datetime
        :param priority: The priority of this SupportStatus.  # noqa: E501
        :type priority: str
        :param contact_information_end_user: The contact_information_end_user of this SupportStatus.  # noqa: E501
        :type contact_information_end_user: str
        :param comment: The comment of this SupportStatus.  # noqa: E501
        :type comment: str
        :param requested_response_time: The requested_response_time of this SupportStatus.  # noqa: E501
        :type requested_response_time: float
        :param status: The status of this SupportStatus.  # noqa: E501
        :type status: str
        :param time_to_resolution: The time_to_resolution of this SupportStatus.  # noqa: E501
        :type time_to_resolution: int
        :param order: The order of this SupportStatus.  # noqa: E501
        :type order: int
        """
        self.swagger_types = {
            'id': str,
            'support_type': str,
            'location': Place,
            'time': datetime,
            'priority': str,
            'contact_information_end_user': str,
            'comment': str,
            'requested_response_time': float,
            'status': str,
            'time_to_resolution': int,
            'order': int
        }

        self.attribute_map = {
            'id': 'id',
            'support_type': 'supportType',
            'location': 'location',
            'time': 'time',
            'priority': 'priority',
            'contact_information_end_user': 'contactInformationEndUser',
            'comment': 'comment',
            'requested_response_time': 'requestedResponseTime',
            'status': 'status',
            'time_to_resolution': 'timeToResolution',
            'order': 'order'
        }
        self._id = id
        self._support_type = support_type
        self._location = location
        self._time = time
        self._priority = priority
        self._contact_information_end_user = contact_information_end_user
        self._comment = comment
        self._requested_response_time = requested_response_time
        self._status = status
        self._time_to_resolution = time_to_resolution
        self._order = order

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

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

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

        the booking id  # noqa: E501

        :return: The id of this SupportStatus.
        :rtype: str
        """
        return self._id

    @id.setter
    def id(self, id: str):
        """Sets the id of this SupportStatus.

        the booking id  # noqa: E501

        :param id: The id of this SupportStatus.
        :type id: str
        """

        self._id = id

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


        :return: The support_type of this SupportStatus.
        :rtype: str
        """
        return self._support_type

    @support_type.setter
    def support_type(self, support_type: str):
        """Sets the support_type of this SupportStatus.


        :param support_type: The support_type of this SupportStatus.
        :type support_type: str
        """
        allowed_values = ["BROKEN_DOWN", "NOT_AT_LOCATION", "MISSING_AFTER_PAUSE", "NOT_CLEAN", "NOT_AVAILABLE", "UNABLE_TO_OPEN", "UNABLE_TO_CLOSE", "API_TECHNICAL", "API_FUNCTIONAL", "ACCIDENT", "OTHER"]  # noqa: E501
        if support_type not in allowed_values:
            raise ValueError(
                "Invalid value for `support_type` ({0}), must be one of {1}"
                .format(support_type, allowed_values)
            )

        self._support_type = support_type

    @property
    def location(self) -> Place:
        """Gets the location of this SupportStatus.


        :return: The location of this SupportStatus.
        :rtype: Place
        """
        return self._location

    @location.setter
    def location(self, location: Place):
        """Sets the location of this SupportStatus.


        :param location: The location of this SupportStatus.
        :type location: Place
        """

        self._location = location

    @property
    def time(self) -> datetime:
        """Gets the time of this SupportStatus.


        :return: The time of this SupportStatus.
        :rtype: datetime
        """
        return self._time

    @time.setter
    def time(self, time: datetime):
        """Sets the time of this SupportStatus.


        :param time: The time of this SupportStatus.
        :type time: datetime
        """

        self._time = time

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

        the priority of the support request.  # noqa: E501

        :return: The priority of this SupportStatus.
        :rtype: str
        """
        return self._priority

    @priority.setter
    def priority(self, priority: str):
        """Sets the priority of this SupportStatus.

        the priority of the support request.  # noqa: E501

        :param priority: The priority of this SupportStatus.
        :type priority: str
        """
        allowed_values = ["ERROR_CANNOT_CONTINUE", "ERROR_CAN_CONTINUE", "DISTURBING_ISSUE", "QUESTION", "OTHER"]  # noqa: E501
        if priority not in allowed_values:
            raise ValueError(
                "Invalid value for `priority` ({0}), must be one of {1}"
                .format(priority, allowed_values)
            )

        self._priority = priority

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

        contact information of the end user in case of direct response requests, like phone number  # noqa: E501

        :return: The contact_information_end_user of this SupportStatus.
        :rtype: str
        """
        return self._contact_information_end_user

    @contact_information_end_user.setter
    def contact_information_end_user(self, contact_information_end_user: str):
        """Sets the contact_information_end_user of this SupportStatus.

        contact information of the end user in case of direct response requests, like phone number  # noqa: E501

        :param contact_information_end_user: The contact_information_end_user of this SupportStatus.
        :type contact_information_end_user: str
        """

        self._contact_information_end_user = contact_information_end_user

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

        free text to send to the end user.  # noqa: E501

        :return: The comment of this SupportStatus.
        :rtype: str
        """
        return self._comment

    @comment.setter
    def comment(self, comment: str):
        """Sets the comment of this SupportStatus.

        free text to send to the end user.  # noqa: E501

        :param comment: The comment of this SupportStatus.
        :type comment: str
        """

        self._comment = comment

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

        time to respond in minutes.  # noqa: E501

        :return: The requested_response_time of this SupportStatus.
        :rtype: float
        """
        return self._requested_response_time

    @requested_response_time.setter
    def requested_response_time(self, requested_response_time: float):
        """Sets the requested_response_time of this SupportStatus.

        time to respond in minutes.  # noqa: E501

        :param requested_response_time: The requested_response_time of this SupportStatus.
        :type requested_response_time: float
        """

        self._requested_response_time = requested_response_time

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


        :return: The status of this SupportStatus.
        :rtype: str
        """
        return self._status

    @status.setter
    def status(self, status: str):
        """Sets the status of this SupportStatus.


        :param status: The status of this SupportStatus.
        :type status: str
        """
        allowed_values = ["PROCESSING", "UPDATE_REQUESTED", "RESOLVED", "CANCELLED"]  # noqa: E501
        if status not in allowed_values:
            raise ValueError(
                "Invalid value for `status` ({0}), must be one of {1}"
                .format(status, allowed_values)
            )

        self._status = status

    @property
    def time_to_resolution(self) -> int:
        """Gets the time_to_resolution of this SupportStatus.

        time in minutes to expected resolution of support request  # noqa: E501

        :return: The time_to_resolution of this SupportStatus.
        :rtype: int
        """
        return self._time_to_resolution

    @time_to_resolution.setter
    def time_to_resolution(self, time_to_resolution: int):
        """Sets the time_to_resolution of this SupportStatus.

        time in minutes to expected resolution of support request  # noqa: E501

        :param time_to_resolution: The time_to_resolution of this SupportStatus.
        :type time_to_resolution: int
        """

        self._time_to_resolution = time_to_resolution

    @property
    def order(self) -> int:
        """Gets the order of this SupportStatus.

        the sequence number of status of the support issue  # noqa: E501

        :return: The order of this SupportStatus.
        :rtype: int
        """
        return self._order

    @order.setter
    def order(self, order: int):
        """Sets the order of this SupportStatus.

        the sequence number of status of the support issue  # noqa: E501

        :param order: The order of this SupportStatus.
        :type order: int
        """

        self._order = order
