# Generated by sila2.code_generator; sila2.__version__: 0.10.3
# -----
# This class does not do anything useful at runtime. Its only purpose is to provide type annotations.
# Since sphinx does not support .pyi files (yet?), this is a .py file.
# -----

from __future__ import annotations

from typing import TYPE_CHECKING

if TYPE_CHECKING:

    from typing import Iterable, List, Optional

    from pausecontroller_types import Pause_Responses, Resume_Responses
    from sila2.client import ClientMetadataInstance, ClientObservableProperty

    from .pausecontroller_types import UUID


class PauseControllerClient:
    """
    Allows to pause or resume a currently running Observable Command. Pausing is the act of stopping the
    progress of the desired intent of a Command with the option of continuing the execution when resuming.

    A SiLA Client SHOULD be able to pause or resume the Observable Commands at any time. Not every Observable Command
    might support this Feature. If not, an "OperationNotSupported" Execution Error MUST be thrown.
    """

    PausedCommands: ClientObservableProperty[List[UUID]]
    """
    A List of Command Execution UUID that are in a paused state.
    """

    def Pause(
        self, CommandExecutionUUID: UUID, *, metadata: Optional[Iterable[ClientMetadataInstance]] = None
    ) -> Pause_Responses:
        """
          Pause the Command execution. The Command can then be resumed again. The Command Execution Status of the
        Observable Command MUST not be affected.
        """
        ...

    def Resume(
        self, CommandExecutionUUID: UUID, *, metadata: Optional[Iterable[ClientMetadataInstance]] = None
    ) -> Resume_Responses:
        """
        Resume the Command after it has been paused.
        """
        ...
