"""Registry sluzeb CyberBrain26.

Definuje, jake sluzby existuji, jak se spousti, na jakem portu bezne bezi.
Používá CLI `cyberbrain service {list,status,start,stop}`.
"""
from __future__ import annotations

from dataclasses import dataclass


@dataclass(frozen=True)
class ServiceSpec:
    name: str
    module: str          # python -m <module>
    port_env: str        # nazev env promenne pro port
    default_port: int    # vychozi LAB port
    description: str
    self_pidfile: bool = False  # pokud True, pidfile si spravuje modul sam


SERVICES: dict[str, ServiceSpec] = {
    "monolith": ServiceSpec(
        name="monolith",
        module="cyberbrain26.app",
        port_env="CB26_MONOLITH_PORT",
        default_port=8080,
        description="Modularni monolit FastAPI (webapp + safe_oi)",
    ),
    "webapp": ServiceSpec(
        name="webapp",
        module="cyberbrain26.services.webapp.app",
        port_env="CB26_WEB_PORT",
        default_port=8180,
        description="WebApp UI + worktree/terminal/openclaw",
    ),
    "litellm": ServiceSpec(
        name="litellm",
        module="cyberbrain26.services.llm_proxy.runner",
        port_env="CB26_LITELLM_PORT",
        default_port=4100,
        description="LiteLLM proxy (jednotny LLM gateway)",
        self_pidfile=True,
    ),
    "safe-oi": ServiceSpec(
        name="safe-oi",
        module="cyberbrain26.services.safe_oi.app",
        port_env="CB26_SAFE_OI_PORT",
        default_port=7782,
        description="SAFE/FULL-OI bezpecnostni API",
    ),
}


def get(name: str) -> ServiceSpec | None:
    return SERVICES.get(name)


def all_names() -> list[str]:
    return sorted(SERVICES.keys())
