# coding: utf-8

from __future__ import absolute_import
from datetime import date, datetime  # noqa: F401

from typing import List, Dict  # noqa: F401

from rbb_swagger_server.models.base_model_ import Model
from rbb_swagger_server.models.simulation_environment_detailed import SimulationEnvironmentDetailed  # noqa: F401,E501
from rbb_swagger_server.models.simulation_run_detailed import SimulationRunDetailed  # noqa: F401,E501
from rbb_swagger_server.models.simulation_summary import SimulationSummary  # noqa: F401,E501
from rbb_swagger_server.models.task_detailed import TaskDetailed  # noqa: F401,E501
from rbb_swagger_server import util


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

    Do not edit the class manually.
    """

    def __init__(self, detail_type: str=None, identifier: int=None, description: str=None, created: datetime=None, result: int=None, environment_name: str=None, queued_task_identifier: str=None, queued_task_state: int=None, config: object=None, on_complete_action: object=None, environment: SimulationEnvironmentDetailed=None, runs: List[SimulationRunDetailed]=None, queued_task: TaskDetailed=None):  # noqa: E501
        """SimulationDetailed - a model defined in Swagger

        :param detail_type: The detail_type of this SimulationDetailed.  # noqa: E501
        :type detail_type: str
        :param identifier: The identifier of this SimulationDetailed.  # noqa: E501
        :type identifier: int
        :param description: The description of this SimulationDetailed.  # noqa: E501
        :type description: str
        :param created: The created of this SimulationDetailed.  # noqa: E501
        :type created: datetime
        :param result: The result of this SimulationDetailed.  # noqa: E501
        :type result: int
        :param environment_name: The environment_name of this SimulationDetailed.  # noqa: E501
        :type environment_name: str
        :param queued_task_identifier: The queued_task_identifier of this SimulationDetailed.  # noqa: E501
        :type queued_task_identifier: str
        :param queued_task_state: The queued_task_state of this SimulationDetailed.  # noqa: E501
        :type queued_task_state: int
        :param config: The config of this SimulationDetailed.  # noqa: E501
        :type config: object
        :param on_complete_action: The on_complete_action of this SimulationDetailed.  # noqa: E501
        :type on_complete_action: object
        :param environment: The environment of this SimulationDetailed.  # noqa: E501
        :type environment: SimulationEnvironmentDetailed
        :param runs: The runs of this SimulationDetailed.  # noqa: E501
        :type runs: List[SimulationRunDetailed]
        :param queued_task: The queued_task of this SimulationDetailed.  # noqa: E501
        :type queued_task: TaskDetailed
        """
        self.swagger_types = {
            'detail_type': str,
            'identifier': int,
            'description': str,
            'created': datetime,
            'result': int,
            'environment_name': str,
            'queued_task_identifier': str,
            'queued_task_state': int,
            'config': object,
            'on_complete_action': object,
            'environment': SimulationEnvironmentDetailed,
            'runs': List[SimulationRunDetailed],
            'queued_task': TaskDetailed
        }

        self.attribute_map = {
            'detail_type': 'detail_type',
            'identifier': 'identifier',
            'description': 'description',
            'created': 'created',
            'result': 'result',
            'environment_name': 'environment_name',
            'queued_task_identifier': 'queued_task_identifier',
            'queued_task_state': 'queued_task_state',
            'config': 'config',
            'on_complete_action': 'on_complete_action',
            'environment': 'environment',
            'runs': 'runs',
            'queued_task': 'queued_task'
        }

        self._detail_type = detail_type
        self._identifier = identifier
        self._description = description
        self._created = created
        self._result = result
        self._environment_name = environment_name
        self._queued_task_identifier = queued_task_identifier
        self._queued_task_state = queued_task_state
        self._config = config
        self._on_complete_action = on_complete_action
        self._environment = environment
        self._runs = runs
        self._queued_task = queued_task

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

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

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


        :return: The detail_type of this SimulationDetailed.
        :rtype: str
        """
        return self._detail_type

    @detail_type.setter
    def detail_type(self, detail_type: str):
        """Sets the detail_type of this SimulationDetailed.


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

        self._detail_type = detail_type

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


        :return: The identifier of this SimulationDetailed.
        :rtype: int
        """
        return self._identifier

    @identifier.setter
    def identifier(self, identifier: int):
        """Sets the identifier of this SimulationDetailed.


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

        self._identifier = identifier

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


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

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


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

        self._description = description

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


        :return: The created of this SimulationDetailed.
        :rtype: datetime
        """
        return self._created

    @created.setter
    def created(self, created: datetime):
        """Sets the created of this SimulationDetailed.


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

        self._created = created

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

        0 is scheduled, -1 is prep failed, -100 is sim failed, 100 is sim succeeded  # noqa: E501

        :return: The result of this SimulationDetailed.
        :rtype: int
        """
        return self._result

    @result.setter
    def result(self, result: int):
        """Sets the result of this SimulationDetailed.

        0 is scheduled, -1 is prep failed, -100 is sim failed, 100 is sim succeeded  # noqa: E501

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

        self._result = result

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

        Name of the simulation environment  # noqa: E501

        :return: The environment_name of this SimulationDetailed.
        :rtype: str
        """
        return self._environment_name

    @environment_name.setter
    def environment_name(self, environment_name: str):
        """Sets the environment_name of this SimulationDetailed.

        Name of the simulation environment  # noqa: E501

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

        self._environment_name = environment_name

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

        Identifier of the task associated to this simulation  # noqa: E501

        :return: The queued_task_identifier of this SimulationDetailed.
        :rtype: str
        """
        return self._queued_task_identifier

    @queued_task_identifier.setter
    def queued_task_identifier(self, queued_task_identifier: str):
        """Sets the queued_task_identifier of this SimulationDetailed.

        Identifier of the task associated to this simulation  # noqa: E501

        :param queued_task_identifier: The queued_task_identifier of this SimulationDetailed.
        :type queued_task_identifier: str
        """

        self._queued_task_identifier = queued_task_identifier

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

        Read only value, taken from associated task  # noqa: E501

        :return: The queued_task_state of this SimulationDetailed.
        :rtype: int
        """
        return self._queued_task_state

    @queued_task_state.setter
    def queued_task_state(self, queued_task_state: int):
        """Sets the queued_task_state of this SimulationDetailed.

        Read only value, taken from associated task  # noqa: E501

        :param queued_task_state: The queued_task_state of this SimulationDetailed.
        :type queued_task_state: int
        """

        self._queued_task_state = queued_task_state

    @property
    def config(self) -> object:
        """Gets the config of this SimulationDetailed.

        Configuration of the simulation.  # noqa: E501

        :return: The config of this SimulationDetailed.
        :rtype: object
        """
        return self._config

    @config.setter
    def config(self, config: object):
        """Sets the config of this SimulationDetailed.

        Configuration of the simulation.  # noqa: E501

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

        self._config = config

    @property
    def on_complete_action(self) -> object:
        """Gets the on_complete_action of this SimulationDetailed.

        Action to take when simulation completes.  # noqa: E501

        :return: The on_complete_action of this SimulationDetailed.
        :rtype: object
        """
        return self._on_complete_action

    @on_complete_action.setter
    def on_complete_action(self, on_complete_action: object):
        """Sets the on_complete_action of this SimulationDetailed.

        Action to take when simulation completes.  # noqa: E501

        :param on_complete_action: The on_complete_action of this SimulationDetailed.
        :type on_complete_action: object
        """

        self._on_complete_action = on_complete_action

    @property
    def environment(self) -> SimulationEnvironmentDetailed:
        """Gets the environment of this SimulationDetailed.

        Read only value, expanded on request.  # noqa: E501

        :return: The environment of this SimulationDetailed.
        :rtype: SimulationEnvironmentDetailed
        """
        return self._environment

    @environment.setter
    def environment(self, environment: SimulationEnvironmentDetailed):
        """Sets the environment of this SimulationDetailed.

        Read only value, expanded on request.  # noqa: E501

        :param environment: The environment of this SimulationDetailed.
        :type environment: SimulationEnvironmentDetailed
        """

        self._environment = environment

    @property
    def runs(self) -> List[SimulationRunDetailed]:
        """Gets the runs of this SimulationDetailed.

        Read only value, expanded on request.  # noqa: E501

        :return: The runs of this SimulationDetailed.
        :rtype: List[SimulationRunDetailed]
        """
        return self._runs

    @runs.setter
    def runs(self, runs: List[SimulationRunDetailed]):
        """Sets the runs of this SimulationDetailed.

        Read only value, expanded on request.  # noqa: E501

        :param runs: The runs of this SimulationDetailed.
        :type runs: List[SimulationRunDetailed]
        """

        self._runs = runs

    @property
    def queued_task(self) -> TaskDetailed:
        """Gets the queued_task of this SimulationDetailed.

        Read only value, expanded on request.  # noqa: E501

        :return: The queued_task of this SimulationDetailed.
        :rtype: TaskDetailed
        """
        return self._queued_task

    @queued_task.setter
    def queued_task(self, queued_task: TaskDetailed):
        """Sets the queued_task of this SimulationDetailed.

        Read only value, expanded on request.  # noqa: E501

        :param queued_task: The queued_task of this SimulationDetailed.
        :type queued_task: TaskDetailed
        """

        self._queued_task = queued_task
