import typer
from rich.console import Console
from rich.panel import Panel
from rich.text import Text

from acl_cli.commands import init, browser, session, credentials, chat

_HELP = """
[bold cyan]ACL[/bold cyan] — Agent Control Layer

[bold]Команды:[/bold]
  [green]init[/green]          Зарегистрироваться и настроить ACL
  [green]chat[/green]          Интерактивный AI-агент в терминале
  [green]browser[/green]       Управление браузером
  [green]session[/green]       Управление сессиями
  [green]credentials[/green]   Управление учётными данными

[bold]Примеры:[/bold]
  [dim]$[/dim] acl init
  [dim]$[/dim] acl browser open kaspi.kz
  [dim]$[/dim] acl browser extract ".price" --fields name:.name,price:.price
  [dim]$[/dim] acl chat
"""

console = Console()


def _version_callback(value: bool) -> None:
    if value:
        from acl_cli import __version__
        console.print(f"[bold cyan]acl[/bold cyan] v{__version__}")
        raise typer.Exit()


def _help_callback(value: bool) -> None:
    if value:
        console.print(Panel(_HELP.strip(), border_style="cyan", padding=(1, 2)))
        raise typer.Exit()


app = typer.Typer(
    name="acl",
    help="ACL — Agent Control Layer CLI",
    no_args_is_help=False,
    invoke_without_command=True,
    add_completion=False,
)
app.add_typer(browser.app, name="browser", help="Управление браузером")
app.add_typer(session.app, name="session", help="Управление сессиями")
app.add_typer(credentials.app, name="credentials", help="Управление учётными данными")
app.command()(init.init)
app.command()(chat.chat)


@app.callback(invoke_without_command=True)
def main(
    ctx: typer.Context,
    version: bool = typer.Option(False, "--version", "-v", help="Показать версию", callback=_version_callback, is_eager=True),
    help_flag: bool = typer.Option(False, "--help", "-h", help="Показать справку", callback=_help_callback, is_eager=True),
) -> None:
    """ACL — Agent Control Layer CLI"""
    if ctx.invoked_subcommand is None:
        _help_callback(True)


if __name__ == "__main__":
    app()
