#!/usr/bin/env python3
"""CLI tool to run a multi-agent meeting."""

from __future__ import annotations

import argparse
import sys
from pathlib import Path

from src.config_loader import load_agents
from src.llm_client import create_client
from src.meeting import run_meeting, save_report


def parse_args(argv: list[str] | None = None) -> argparse.Namespace:
    """Parse command-line arguments.

    Args:
        argv: Argument list to parse; defaults to sys.argv when None.

    Returns:
        Parsed argparse.Namespace with topic, agents, max_rounds,
        agents_dir, and output_dir attributes.
    """
    parser = argparse.ArgumentParser(
        description="Run a multi-agent meeting on a given topic.",
    )
    parser.add_argument(
        "--topic",
        required=True,
        help="The discussion topic for the meeting.",
    )
    parser.add_argument(
        "--agents",
        required=True,
        help="Comma-separated list of agent names to participate.",
    )
    parser.add_argument(
        "--max-rounds",
        type=int,
        default=5,
        help="Maximum number of discussion rounds (default: 5).",
    )
    parser.add_argument(
        "--agents-dir",
        default="agents",
        help="Directory containing agent config files (default: agents/).",
    )
    parser.add_argument(
        "--output-dir",
        default="reports",
        help="Directory to save the meeting report (default: reports/).",
    )
    return parser.parse_args(argv)


def main() -> None:
    """CLI entry point for run_meeting."""
    args = parse_args()

    agent_names = [name.strip() for name in args.agents.split(",")]
    agents_dir = Path(args.agents_dir)
    output_dir = Path(args.output_dir)

    try:
        agent_configs = load_agents(agent_names, agents_dir=agents_dir)
    except FileNotFoundError as exc:
        print(f"Error: {exc}", file=sys.stderr)
        sys.exit(1)

    client = create_client()

    report = run_meeting(
        topic=args.topic,
        agent_configs=agent_configs,
        client=client,
        max_rounds=args.max_rounds,
        output_dir=output_dir,
    )

    report_path = save_report(report, topic=args.topic, output_dir=output_dir)
    print(f"\nReport saved to: {report_path}")


if __name__ == "__main__":
    main()
