from datetime import date, datetime  # noqa: F401

from typing import List, Dict  # noqa: F401

from chromestatus_openapi.models.base_model import Model
from chromestatus_openapi import util


class GateInfo(Model):
    """NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).

    Do not edit the class manually.
    """

    def __init__(self, name=None, description=None, gate_type=None, rule=None, approvers=None, team_name=None, escalation_email=None, slo_initial_response=5, slo_resolve=10):  # noqa: E501
        """GateInfo - a model defined in OpenAPI

        :param name: The name of this GateInfo.  # noqa: E501
        :type name: str
        :param description: The description of this GateInfo.  # noqa: E501
        :type description: str
        :param gate_type: The gate_type of this GateInfo.  # noqa: E501
        :type gate_type: int
        :param rule: The rule of this GateInfo.  # noqa: E501
        :type rule: str
        :param approvers: The approvers of this GateInfo.  # noqa: E501
        :type approvers: str
        :param team_name: The team_name of this GateInfo.  # noqa: E501
        :type team_name: str
        :param escalation_email: The escalation_email of this GateInfo.  # noqa: E501
        :type escalation_email: str
        :param slo_initial_response: The slo_initial_response of this GateInfo.  # noqa: E501
        :type slo_initial_response: int
        :param slo_resolve: The slo_resolve of this GateInfo.  # noqa: E501
        :type slo_resolve: int
        """
        self.openapi_types = {
            'name': str,
            'description': str,
            'gate_type': int,
            'rule': str,
            'approvers': str,
            'team_name': str,
            'escalation_email': str,
            'slo_initial_response': int,
            'slo_resolve': int
        }

        self.attribute_map = {
            'name': 'name',
            'description': 'description',
            'gate_type': 'gate_type',
            'rule': 'rule',
            'approvers': 'approvers',
            'team_name': 'team_name',
            'escalation_email': 'escalation_email',
            'slo_initial_response': 'slo_initial_response',
            'slo_resolve': 'slo_resolve'
        }

        self._name = name
        self._description = description
        self._gate_type = gate_type
        self._rule = rule
        self._approvers = approvers
        self._team_name = team_name
        self._escalation_email = escalation_email
        self._slo_initial_response = slo_initial_response
        self._slo_resolve = slo_resolve

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

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

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


        :return: The name of this GateInfo.
        :rtype: str
        """
        return self._name

    @name.setter
    def name(self, name: str):
        """Sets the name of this GateInfo.


        :param name: The name of this GateInfo.
        :type name: str
        """

        self._name = name

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


        :return: The description of this GateInfo.
        :rtype: str
        """
        return self._description

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


        :param description: The description of this GateInfo.
        :type description: str
        """

        self._description = description

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


        :return: The gate_type of this GateInfo.
        :rtype: int
        """
        return self._gate_type

    @gate_type.setter
    def gate_type(self, gate_type: int):
        """Sets the gate_type of this GateInfo.


        :param gate_type: The gate_type of this GateInfo.
        :type gate_type: int
        """

        self._gate_type = gate_type

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


        :return: The rule of this GateInfo.
        :rtype: str
        """
        return self._rule

    @rule.setter
    def rule(self, rule: str):
        """Sets the rule of this GateInfo.


        :param rule: The rule of this GateInfo.
        :type rule: str
        """

        self._rule = rule

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

        A list of approvers. A single string can also be accepted and will be treated as a list containing that string.  # noqa: E501

        :return: The approvers of this GateInfo.
        :rtype: str
        """
        return self._approvers

    @approvers.setter
    def approvers(self, approvers: str):
        """Sets the approvers of this GateInfo.

        A list of approvers. A single string can also be accepted and will be treated as a list containing that string.  # noqa: E501

        :param approvers: The approvers of this GateInfo.
        :type approvers: str
        """

        self._approvers = approvers

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


        :return: The team_name of this GateInfo.
        :rtype: str
        """
        return self._team_name

    @team_name.setter
    def team_name(self, team_name: str):
        """Sets the team_name of this GateInfo.


        :param team_name: The team_name of this GateInfo.
        :type team_name: str
        """

        self._team_name = team_name

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


        :return: The escalation_email of this GateInfo.
        :rtype: str
        """
        return self._escalation_email

    @escalation_email.setter
    def escalation_email(self, escalation_email: str):
        """Sets the escalation_email of this GateInfo.


        :param escalation_email: The escalation_email of this GateInfo.
        :type escalation_email: str
        """

        self._escalation_email = escalation_email

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

        DEFAULT_SLO_LIMIT is 5 in approval_defs.py  # noqa: E501

        :return: The slo_initial_response of this GateInfo.
        :rtype: int
        """
        return self._slo_initial_response

    @slo_initial_response.setter
    def slo_initial_response(self, slo_initial_response: int):
        """Sets the slo_initial_response of this GateInfo.

        DEFAULT_SLO_LIMIT is 5 in approval_defs.py  # noqa: E501

        :param slo_initial_response: The slo_initial_response of this GateInfo.
        :type slo_initial_response: int
        """

        self._slo_initial_response = slo_initial_response

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

        DEFAULT_SLO_RESOLVE_LIMIT is 10 in approval_defs.py  # noqa: E501

        :return: The slo_resolve of this GateInfo.
        :rtype: int
        """
        return self._slo_resolve

    @slo_resolve.setter
    def slo_resolve(self, slo_resolve: int):
        """Sets the slo_resolve of this GateInfo.

        DEFAULT_SLO_RESOLVE_LIMIT is 10 in approval_defs.py  # noqa: E501

        :param slo_resolve: The slo_resolve of this GateInfo.
        :type slo_resolve: int
        """

        self._slo_resolve = slo_resolve
