from typing import Optional from datetime import date from fastapi import APIRouter, Depends, Query from fastapi.responses import StreamingResponse from sqlalchemy.ext.asyncio import AsyncSession from app.database import get_db from app.middleware.auth import get_current_user, require_director_or_leader from app.services.excel_export import export_weekly_report router = APIRouter(prefix="/export", tags=["Export"]) @router.get("/weekly-report") async def download_weekly_report( reference_date: Optional[str] = Query(None), current_user: dict = Depends(require_director_or_leader), db: AsyncSession = Depends(get_db), ): """Export week report as 4-sheet .xlsx. Pass reference_date for historical weeks.""" ref = date.fromisoformat(reference_date) if reference_date else None excel_bytes = await export_weekly_report(db, ref) return StreamingResponse( excel_bytes, media_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", headers={"Content-Disposition": "attachment; filename=weekly_report.xlsx"}, )