"""ExecutionProvider - local/container/microVM."""
from __future__ import annotations

from typing import Any, Protocol, runtime_checkable


@runtime_checkable
class ExecutionProvider(Protocol):
    """Provider pro spousteni kodu.

    Backend muze byt: lokalni proces, Podman, Docker, Firecracker microVM,
    Kata/gVisor, nebo jiny overeny backend.

    Pravidlo v4.1: Neovereny kod podle rizika dostane disposable filesystem,
    omezene credentials, omezeny network egress a casovy/resource limit.

    ``allow_network`` je defaultne ``False`` a zadna implementace ho nesmi
    implicitne zapnout. Výjimkou je jen overeny engagement profil, ktery to
    explicitne vyplní; backend, ktery parametr prijima, ale jinak neumi -
    volajici flag zmini jen ten jeden aspekt sandboxu.
    """

    @property
    def provider_name(self) -> str:
        ...

    async def execute(
        self,
        code: str,
        language: str,
        *,
        timeout_seconds: int = 30,
        workspace: str | None = None,
        allow_network: bool = False,
    ) -> dict[str, Any]:
        ...
