"""Analytics endpoints backing the dashboard cards and charts."""

from __future__ import annotations

from typing import Any

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

from app.database import get_db
from app.services import analytics_service

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


@router.get("/dashboard")
def dashboard(
    db: Session = Depends(get_db),
    campaign_id: int | None = Query(default=None, alias="campaignId"),
) -> dict[str, Any]:
    return analytics_service.dashboard(db, campaign_id)


@router.get("/overview")
def overview(
    db: Session = Depends(get_db),
    campaign_id: int | None = Query(default=None, alias="campaignId"),
) -> dict[str, Any]:
    return analytics_service.overview(db, campaign_id)


@router.get("/campaigns")
def campaign_performance(db: Session = Depends(get_db)) -> list[dict[str, Any]]:
    return analytics_service.campaign_performance(db)


@router.get("/activity")
def activity(
    db: Session = Depends(get_db),
    days: int = Query(default=14, ge=1, le=90),
    campaign_id: int | None = Query(default=None, alias="campaignId"),
) -> list[dict[str, Any]]:
    return analytics_service.outreach_activity(db, days, campaign_id)


@router.get("/score-distribution")
def score_distribution(
    db: Session = Depends(get_db),
    campaign_id: int | None = Query(default=None, alias="campaignId"),
) -> list[dict[str, Any]]:
    return analytics_service.score_distribution(db, campaign_id)


@router.get("/replies")
def replies(
    db: Session = Depends(get_db),
    campaign_id: int | None = Query(default=None, alias="campaignId"),
) -> list[dict[str, Any]]:
    return analytics_service.reply_breakdown(db, campaign_id)
