"""Preset meeting scenarios with predefined agent configurations."""

from __future__ import annotations

from pydantic import BaseModel


class Scenario(BaseModel):
    """A preset meeting scenario with predefined participants."""

    name: str
    description: str
    agents: list[str]
    suggested_max_rounds: int = 10
    context_hint: str = ""


BUILTIN_SCENARIOS: dict[str, Scenario] = {
    "product_review": Scenario(
        name="product_review",
        description="全面产品评审：商业 + 技术 + UX 三维拷问",
        agents=["gstack_commercial", "gstack_technical", "gstack_ux"],
    ),
    "startup_pitch": Scenario(
        name="startup_pitch",
        description="创业方向论证：多位大佬视角",
        agents=[
            "gstack_pg",
            "gstack_bezos",
            "gstack_munger",
            "gstack_altman",
            "gstack_horowitz",
        ],
        suggested_max_rounds=12,
    ),
    "tech_design": Scenario(
        name="tech_design",
        description="技术架构评审",
        agents=[
            "ecc_architect",
            "ecc_security_reviewer",
            "ecc_performance_optimizer",
            "gstack_technical",
        ],
    ),
    "code_review_python": Scenario(
        name="code_review_python",
        description="Python 代码审查",
        agents=["ecc_python_reviewer", "ecc_security_reviewer", "ecc_tdd_guide"],
    ),
    "design_review": Scenario(
        name="design_review",
        description="设计评审：大师组",
        agents=["gstack_rams", "gstack_norman", "gstack_ive", "gstack_ux"],
    ),
    "strategic_decision": Scenario(
        name="strategic_decision",
        description="战略决策评估",
        agents=[
            "gstack_bezos",
            "gstack_grove",
            "gstack_munger",
            "business_analyst",
        ],
    ),
}


def load_scenario(name: str) -> Scenario:
    """Load a builtin scenario by name.

    Args:
        name: The scenario identifier.

    Returns:
        The matching Scenario instance.

    Raises:
        KeyError: If the scenario name is not found.
    """
    if name not in BUILTIN_SCENARIOS:
        raise KeyError(
            f"Scenario '{name}' not found. "
            f"Available: {', '.join(BUILTIN_SCENARIOS.keys())}"
        )
    return BUILTIN_SCENARIOS[name]


def list_scenarios() -> dict[str, Scenario]:
    """Return all builtin scenarios.

    Returns:
        Dictionary mapping scenario names to Scenario objects.
    """
    return BUILTIN_SCENARIOS
