# 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.day import Day  # noqa: F401,E501
from swagger_server import util


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

    Do not edit the class manually.
    """
    def __init__(self, user_type: str=None, station_id: str=None, region_id: str=None, start_time: str=None, end_time: str=None, days: List[Day]=None):  # noqa: E501
        """SystemHours - a model defined in Swagger

        :param user_type: The user_type of this SystemHours.  # noqa: E501
        :type user_type: str
        :param station_id: The station_id of this SystemHours.  # noqa: E501
        :type station_id: str
        :param region_id: The region_id of this SystemHours.  # noqa: E501
        :type region_id: str
        :param start_time: The start_time of this SystemHours.  # noqa: E501
        :type start_time: str
        :param end_time: The end_time of this SystemHours.  # noqa: E501
        :type end_time: str
        :param days: The days of this SystemHours.  # noqa: E501
        :type days: List[Day]
        """
        self.swagger_types = {
            'user_type': str,
            'station_id': str,
            'region_id': str,
            'start_time': str,
            'end_time': str,
            'days': List[Day]
        }

        self.attribute_map = {
            'user_type': 'userType',
            'station_id': 'stationId',
            'region_id': 'regionId',
            'start_time': 'startTime',
            'end_time': 'endTime',
            'days': 'days'
        }
        self._user_type = user_type
        self._station_id = station_id
        self._region_id = region_id
        self._start_time = start_time
        self._end_time = end_time
        self._days = days

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

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

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

        This indicates that this set of rental hours applies to either members or non-members only.  # noqa: E501

        :return: The user_type of this SystemHours.
        :rtype: str
        """
        return self._user_type

    @user_type.setter
    def user_type(self, user_type: str):
        """Sets the user_type of this SystemHours.

        This indicates that this set of rental hours applies to either members or non-members only.  # noqa: E501

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

        self._user_type = user_type

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

        If this parameter is present, it means that startTime and endTime correspond to the opening and closing hours of the station. (GET /operator/stations)  # noqa: E501

        :return: The station_id of this SystemHours.
        :rtype: str
        """
        return self._station_id

    @station_id.setter
    def station_id(self, station_id: str):
        """Sets the station_id of this SystemHours.

        If this parameter is present, it means that startTime and endTime correspond to the opening and closing hours of the station. (GET /operator/stations)  # noqa: E501

        :param station_id: The station_id of this SystemHours.
        :type station_id: str
        """

        self._station_id = station_id

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

        If this parameter is present, it means that startTime and endTime correspond to the opening and closing hours for the region. (GET /operator/regions)  # noqa: E501

        :return: The region_id of this SystemHours.
        :rtype: str
        """
        return self._region_id

    @region_id.setter
    def region_id(self, region_id: str):
        """Sets the region_id of this SystemHours.

        If this parameter is present, it means that startTime and endTime correspond to the opening and closing hours for the region. (GET /operator/regions)  # noqa: E501

        :param region_id: The region_id of this SystemHours.
        :type region_id: str
        """

        self._region_id = region_id

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


        :return: The start_time of this SystemHours.
        :rtype: str
        """
        return self._start_time

    @start_time.setter
    def start_time(self, start_time: str):
        """Sets the start_time of this SystemHours.


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

        self._start_time = start_time

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


        :return: The end_time of this SystemHours.
        :rtype: str
        """
        return self._end_time

    @end_time.setter
    def end_time(self, end_time: str):
        """Sets the end_time of this SystemHours.


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

        self._end_time = end_time

    @property
    def days(self) -> List[Day]:
        """Gets the days of this SystemHours.

        An array of abbreviations (first 3 letters) of English names of the days of the week that this hour any applies to (i.e. [\"mon\", \"tue\"]). Each day can only appear once within all of the hours anys in this feed.  # noqa: E501

        :return: The days of this SystemHours.
        :rtype: List[Day]
        """
        return self._days

    @days.setter
    def days(self, days: List[Day]):
        """Sets the days of this SystemHours.

        An array of abbreviations (first 3 letters) of English names of the days of the week that this hour any applies to (i.e. [\"mon\", \"tue\"]). Each day can only appear once within all of the hours anys in this feed.  # noqa: E501

        :param days: The days of this SystemHours.
        :type days: List[Day]
        """
        if days is None:
            raise ValueError("Invalid value for `days`, must not be `None`")  # noqa: E501

        self._days = days
