import uuid from datetime import date from typing import Optional from fastapi import APIRouter, Depends, Query from sqlalchemy.ext.asyncio import AsyncSession from app.database import get_db from app.middleware.auth import get_current_user from app.services.dashboard import get_dashboard_stats, get_reporting_progress, get_weekly_report from app.services.light_board import get_light_board router = APIRouter(prefix="/dashboard", tags=["Dashboard"]) @router.get("/stats") async def dashboard_stats( reference_date: Optional[str] = Query(None), current_user: dict = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """Get dashboard card statistics. Pass reference_date (YYYY-MM-DD) for historical weeks.""" ref = date.fromisoformat(reference_date) if reference_date else None stats = await get_dashboard_stats(db, ref) return stats @router.get("/progress") async def reporting_progress( reference_date: Optional[str] = Query(None), current_user: dict = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """Get per-manager reporting progress. Managers only see themselves.""" ref = date.fromisoformat(reference_date) if reference_date else None return await get_reporting_progress(db, ref, current_user["user_id"], current_user["role"]) @router.get("/weekly-report") async def weekly_report( manager_id: Optional[str] = Query(None), customer_id: Optional[str] = Query(None), reference_date: Optional[str] = Query(None), current_user: dict = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """Get full weekly report data. Pass reference_date for historical weeks.""" ref = date.fromisoformat(reference_date) if reference_date else None return await get_weekly_report( db=db, user_id=uuid.UUID(current_user["user_id"]), role=current_user["role"], filter_manager_id=uuid.UUID(manager_id) if manager_id else None, filter_customer_id=uuid.UUID(customer_id) if customer_id else None, reference_date=ref, ) @router.get("/light-board") async def light_board( reference_date: Optional[str] = Query(None), current_user: dict = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): """Get customer visit coverage matrix. Managers see only themselves.""" ref = date.fromisoformat(reference_date) if reference_date else None return await get_light_board(db, ref, uuid.UUID(current_user["user_id"]), current_user["role"])