"""acl session * — управление сессиями."""

from __future__ import annotations

import typer

from acl_cli import client
from acl_cli.output import error, info, success, table, spinner

app = typer.Typer(help="Управление сессиями", no_args_is_help=True)


@app.command("list")
def list_sessions(
    user: str = typer.Option("default", "--user", "-u", help="X-User-ID"),
) -> None:
    """Показать таблицу сессий пользователя."""
    with spinner("Загрузка сессий..."):
        result = client.get(
            "/sessions",
            params={"user_id": user},
            headers={"X-User-ID": user},
        )
    rows = result if isinstance(result, list) else []
    if not rows:
        info("Нет активных сессий.")
        return
    # Normalize field names for display
    for row in rows:
        if "is_authenticated" in row and "authenticated" not in row:
            row["authenticated"] = "✅" if row.pop("is_authenticated") else "—"
        if row.get("expires_at") is None:
            row["expires_at"] = "—"
    table(rows, columns=["site_domain", "authenticated", "expires_at", "last_used_at"])


@app.command("delete")
def delete(
    site_domain: str = typer.Argument(..., help="Домен сайта"),
    user: str = typer.Option("default", "--user", "-u", help="X-User-ID"),
) -> None:
    """Удалить сессию для указанного домена."""
    client.delete(
        f"/sessions/{site_domain}",
        headers={"X-User-ID": user},
    )
    success(f"Сессия {site_domain} удалена")


@app.command("clear")
def clear(
    user: str = typer.Option("default", "--user", "-u", help="X-User-ID"),
) -> None:
    """Удалить все сессии пользователя (с подтверждением)."""
    confirm = typer.confirm("Удалить все сессии?", default=False)
    if not confirm:
        info("Отменено.")
        raise typer.Exit(0)
    client.delete(
        "/sessions",
        headers={"X-User-ID": user},
    )
    success("Все сессии удалены")
