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.models.process_stage import ProcessStage
from chromestatus_openapi import util

from chromestatus_openapi.models.process_stage import ProcessStage  # noqa: E501

class Process(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, applicability=None, stages=None):  # noqa: E501
        """Process - a model defined in OpenAPI

        :param name: The name of this Process.  # noqa: E501
        :type name: str
        :param description: The description of this Process.  # noqa: E501
        :type description: str
        :param applicability: The applicability of this Process.  # noqa: E501
        :type applicability: str
        :param stages: The stages of this Process.  # noqa: E501
        :type stages: List[ProcessStage]
        """
        self.openapi_types = {
            'name': str,
            'description': str,
            'applicability': str,
            'stages': List[ProcessStage]
        }

        self.attribute_map = {
            'name': 'name',
            'description': 'description',
            'applicability': 'applicability',
            'stages': 'stages'
        }

        self._name = name
        self._description = description
        self._applicability = applicability
        self._stages = stages

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

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

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


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

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


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

        self._name = name

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


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

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


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

        self._description = description

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


        :return: The applicability of this Process.
        :rtype: str
        """
        return self._applicability

    @applicability.setter
    def applicability(self, applicability: str):
        """Sets the applicability of this Process.


        :param applicability: The applicability of this Process.
        :type applicability: str
        """

        self._applicability = applicability

    @property
    def stages(self) -> List[ProcessStage]:
        """Gets the stages of this Process.


        :return: The stages of this Process.
        :rtype: List[ProcessStage]
        """
        return self._stages

    @stages.setter
    def stages(self, stages: List[ProcessStage]):
        """Sets the stages of this Process.


        :param stages: The stages of this Process.
        :type stages: List[ProcessStage]
        """

        self._stages = stages
