# Generated by sila2.code_generator; sila2.__version__: 0.10.3
from __future__ import annotations

from typing import Set

from sila2.client import SilaClient
from sila2.framework import FullyQualifiedFeatureIdentifier

from . import cancelcontroller, laborchestratorservice, pausecontroller, simulationcontroller


class Client(SilaClient):

    SimulationController: simulationcontroller.SimulationControllerClient

    LabOrchestratorService: laborchestratorservice.LabOrchestratorServiceClient

    CancelController: cancelcontroller.CancelControllerClient

    PauseController: pausecontroller.PauseControllerClient

    _expected_features: Set[FullyQualifiedFeatureIdentifier] = {
        FullyQualifiedFeatureIdentifier("org.silastandard/core/SiLAService/v1"),
        FullyQualifiedFeatureIdentifier("org.silastandard/core/SimulationController/v1"),
        FullyQualifiedFeatureIdentifier("de.unigreifswald/instruments/LabOrchestratorService/v1"),
        FullyQualifiedFeatureIdentifier("org.silastandard/core.commands/CancelController/v1"),
        FullyQualifiedFeatureIdentifier("org.silastandard/core.commands/PauseController/v2"),
    }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self._register_defined_execution_error_class(
            simulationcontroller.SimulationControllerFeature.defined_execution_errors["StartSimulationModeFailed"],
            simulationcontroller.StartSimulationModeFailed,
        )

        self._register_defined_execution_error_class(
            simulationcontroller.SimulationControllerFeature.defined_execution_errors["StartRealModeFailed"],
            simulationcontroller.StartRealModeFailed,
        )

        self._register_defined_execution_error_class(
            laborchestratorservice.LabOrchestratorServiceFeature.defined_execution_errors["InvalidProcess"],
            laborchestratorservice.InvalidProcess,
        )

        self._register_defined_execution_error_class(
            laborchestratorservice.LabOrchestratorServiceFeature.defined_execution_errors["InvalidLabConfiguration"],
            laborchestratorservice.InvalidLabConfiguration,
        )

        self._register_defined_execution_error_class(
            cancelcontroller.CancelControllerFeature.defined_execution_errors["InvalidCommandExecutionUUID"],
            cancelcontroller.InvalidCommandExecutionUUID,
        )

        self._register_defined_execution_error_class(
            cancelcontroller.CancelControllerFeature.defined_execution_errors["OperationNotSupported"],
            cancelcontroller.OperationNotSupported,
        )

        self._register_defined_execution_error_class(
            pausecontroller.PauseControllerFeature.defined_execution_errors["InvalidCommandExecutionUUID"],
            pausecontroller.InvalidCommandExecutionUUID,
        )

        self._register_defined_execution_error_class(
            pausecontroller.PauseControllerFeature.defined_execution_errors["InvalidCommandState"],
            pausecontroller.InvalidCommandState,
        )

        self._register_defined_execution_error_class(
            pausecontroller.PauseControllerFeature.defined_execution_errors["OperationNotSupported"],
            pausecontroller.OperationNotSupported,
        )
