"""Router for Dashboard summary endpoint."""

from datetime import date

from fastapi import APIRouter, Depends, HTTPException, Query, status
from sqlalchemy.ext.asyncio import AsyncSession

from app.core.database import get_db
from app.dependencies import get_current_user
from app.models.user import User
from app.services import analytics_service, dashboard_service

router = APIRouter(
    prefix="/spbus/{spbu_id}/dashboard",
    tags=["dashboard"],
)


@router.get("/summary", response_model=dict)
async def get_summary(
    spbu_id: int,
    tanggal_mulai: date = Query(...),
    tanggal_akhir: date = Query(...),
    db: AsyncSession = Depends(get_db),
    current_user: User = Depends(get_current_user),
) -> dict:
    """Get aggregated dashboard summary for a date range."""
    if tanggal_mulai > tanggal_akhir:
        raise HTTPException(
            status_code=status.HTTP_400_BAD_REQUEST,
            detail="tanggal_mulai harus sebelum atau sama dengan tanggal_akhir",
        )
    try:
        summary = await dashboard_service.get_summary(
            db, spbu_id, tanggal_mulai, tanggal_akhir
        )
    except ValueError as e:
        raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(e))
    return {"data": summary.model_dump()}


@router.get("/trend", response_model=dict)
async def get_trend(
    spbu_id: int,
    tanggal_mulai: date = Query(...),
    tanggal_akhir: date = Query(...),
    db: AsyncSession = Depends(get_db),
    current_user: User = Depends(get_current_user),
) -> dict:
    """Get daily trend data for dashboard charts."""
    if tanggal_mulai > tanggal_akhir:
        raise HTTPException(
            status_code=status.HTTP_400_BAD_REQUEST,
            detail="tanggal_mulai harus sebelum atau sama dengan tanggal_akhir",
        )
    data = await analytics_service.get_daily_trend(db, spbu_id, tanggal_mulai, tanggal_akhir)
    return {"data": data}
