from __future__ import annotations

from factory_status import (
    FactoryActivity,
    FactoryAvailability,
    FactoryStatusSnapshot,
)
from tray_model import TrayMenuItem, TrayMenuItemKind


def factory_status_label(snapshot: FactoryStatusSnapshot) -> str:
    if snapshot.availability == FactoryAvailability.UNAVAILABLE:
        return "Status: unavailable"
    if snapshot.activity == FactoryActivity.LIVE:
        count = len(snapshot.live_runs)
        noun = "run" if count == 1 else "runs"
        return f"Status: live ({count} {noun})"
    return "Status: idle"


def factory_repo_label(repo: str | None) -> str:
    if repo:
        return repo
    return "repo unknown"


def build_factory_menu_items(snapshot: FactoryStatusSnapshot) -> tuple[TrayMenuItem, ...]:
    children: list[TrayMenuItem] = [
        TrayMenuItem(
            kind=TrayMenuItemKind.ACTION,
            label=factory_status_label(snapshot),
            sensitive=False,
        ),
    ]

    if snapshot.activity == FactoryActivity.LIVE:
        for run in snapshot.live_runs:
            children.append(
                TrayMenuItem(
                    kind=TrayMenuItemKind.ACTION,
                    label=factory_repo_label(run.repo),
                    sensitive=False,
                ),
            )

    if snapshot.pending_decisions:
        count = len(snapshot.pending_decisions)
        noun = "decision" if count == 1 else "decisions"
        children.append(
            TrayMenuItem(
                kind=TrayMenuItemKind.ACTION,
                label=f"{count} {noun} waiting — open deck to answer",
                action="open_factory",
                sensitive=True,
            ),
        )

    children.append(TrayMenuItem(kind=TrayMenuItemKind.SEPARATOR))
    children.append(
        TrayMenuItem(
            kind=TrayMenuItemKind.ACTION,
            label="Open factory in deck",
            action="open_factory",
            sensitive=True,
        ),
    )
    return (
        TrayMenuItem(
            kind=TrayMenuItemKind.SUBMENU,
            label="Factory",
            children=tuple(children),
        ),
    )
