"""Mail traffic statistics API (privacy-safe metadata only)."""

from __future__ import annotations

from typing import Optional

from fastapi import APIRouter, Depends, Query
from sqlalchemy.orm import Session

from ..db import get_db
from ..mail_stats import (
    aggregate_by_day,
    aggregate_by_mailbox,
    chart_svg,
    collect_from_journal,
    list_traffic,
    summary_stats,
)
from ..security import require_admin

router = APIRouter(prefix="/stats", tags=["stats"])


@router.post("/collect")
def collect_stats(db: Session = Depends(get_db), _: str = Depends(require_admin)):
    return collect_from_journal(db)


@router.get("/traffic")
def traffic(
    direction: Optional[str] = Query(default=None),
    mailbox: Optional[str] = Query(default=None),
    limit: int = Query(default=100, ge=1, le=1000),
    offset: int = Query(default=0, ge=0),
    db: Session = Depends(get_db),
    _: str = Depends(require_admin),
):
    return {
        "items": list_traffic(db, direction=direction, mailbox=mailbox, limit=limit, offset=offset),
        "privacy_note": "Only mailbox, direction, size and timestamp are stored.",
    }


@router.get("/summary")
def stats_summary(db: Session = Depends(get_db), _: str = Depends(require_admin)):
    return summary_stats(db)


@router.get("/daily")
def stats_daily(
    days: int = Query(default=30, ge=1, le=3660),
    mailbox: Optional[str] = Query(default=None),
    db: Session = Depends(get_db),
    _: str = Depends(require_admin),
):
    return {"days": days, "series": aggregate_by_day(db, days=days, mailbox=mailbox)}


@router.get("/mailboxes")
def stats_mailboxes(
    days: int = Query(default=30, ge=1, le=3660),
    limit: int = Query(default=50, ge=1, le=500),
    db: Session = Depends(get_db),
    _: str = Depends(require_admin),
):
    return {"days": days, "mailboxes": aggregate_by_mailbox(db, days=days, limit=limit)}


@router.get("/chart.svg")
def stats_chart_svg(
    days: int = Query(default=14, ge=1, le=90),
    db: Session = Depends(get_db),
    _: str = Depends(require_admin),
):
    from fastapi.responses import Response

    series = aggregate_by_day(db, days=days)
    svg = chart_svg(series)
    return Response(content=svg, media_type="image/svg+xml")
