from datetime import datetime from typing import Any from uuid import UUID from fastapi import APIRouter, Depends, Query from sqlalchemy.ext.asyncio import AsyncSession from app.dependencies import get_current_user, get_db from app.services.report_service import ReportService router = APIRouter(prefix="/reports", tags=["reports"]) report_service = ReportService() @router.get("/usage") async def get_usage_stats( client_id: UUID | None = Query(None), date_from: datetime | None = Query(None), date_to: datetime | None = Query(None), db: AsyncSession = Depends(get_db), current_user: dict = Depends(get_current_user), ) -> dict[str, Any]: """Get usage statistics (total jobs, tokens, cost, status breakdown).""" return await report_service.get_usage_stats( db, client_id=client_id, date_from=date_from, date_to=date_to ) @router.get("/tokens") async def get_token_cost_data( client_id: UUID | None = Query(None), date_from: datetime | None = Query(None), date_to: datetime | None = Query(None), db: AsyncSession = Depends(get_db), current_user: dict = Depends(get_current_user), ) -> list[dict[str, Any]]: """Get token usage and cost data grouped by day.""" return await report_service.get_token_cost_data( db, client_id=client_id, date_from=date_from, date_to=date_to ) @router.get("/quality") async def get_quality_metrics( client_id: UUID | None = Query(None), db: AsyncSession = Depends(get_db), current_user: dict = Depends(get_current_user), ) -> dict[str, Any]: """Get quality metrics (confidence tier distribution, feedback stats).""" return await report_service.get_quality_metrics(db, client_id=client_id) @router.get("/locale-stats") async def get_locale_stats( client_id: UUID | None = Query(None), date_from: datetime | None = Query(None), date_to: datetime | None = Query(None), db: AsyncSession = Depends(get_db), current_user: dict = Depends(get_current_user), ) -> list[dict[str, Any]]: """Get per-locale stats (tokens, cost, avg duration).""" return await report_service.get_locale_stats( db, client_id=client_id, date_from=date_from, date_to=date_to ) @router.get("/jobs-over-time") async def get_jobs_over_time( client_id: UUID | None = Query(None), date_from: datetime | None = Query(None), date_to: datetime | None = Query(None), db: AsyncSession = Depends(get_db), current_user: dict = Depends(get_current_user), ) -> list[dict[str, Any]]: """Get job counts grouped by week for chart display.""" return await report_service.get_jobs_over_time( db, client_id=client_id, date_from=date_from, date_to=date_to )