from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy import select from app.core.database import get_db from app.core.security import get_current_user_id from app.models.checklist import ChecklistItem from app.schemas.schemas import ChecklistItemOut, ChecklistUpdateStatus from app.services.checklist_engine import get_proximo_passo router = APIRouter(prefix="/familias/{familia_id}/checklist", tags=["checklist"]) @router.get("/", response_model=list[ChecklistItemOut]) async def listar(familia_id: int, db: AsyncSession = Depends(get_db)): result = await db.execute( select(ChecklistItem).where(ChecklistItem.familia_id == familia_id).order_by(ChecklistItem.ordem) ) return result.scalars().all() @router.put("/{item_id}", response_model=ChecklistItemOut) async def atualizar_status(familia_id: int, item_id: int, data: ChecklistUpdateStatus, db: AsyncSession = Depends(get_db)): result = await db.execute(select(ChecklistItem).where(ChecklistItem.id == item_id, ChecklistItem.familia_id == familia_id)) item = result.scalar_one_or_none() if not item: raise HTTPException(404, "Item não encontrado") item.status = data.status await db.commit() await db.refresh(item) return item @router.get("/proximo", response_model=ChecklistItemOut | None) async def proximo_passo(familia_id: int, db: AsyncSession = Depends(get_db)): result = await db.execute( select(ChecklistItem).where(ChecklistItem.familia_id == familia_id).order_by(ChecklistItem.ordem) ) items = [{"id": i.id, "status": i.status, "ordem": i.ordem, "titulo": i.titulo, "descricao": i.descricao, "fase": i.fase, "categoria": i.categoria, "prazo_dias": i.prazo_dias, "familia_id": i.familia_id, "falecido_id": i.falecido_id, "dependencia_id": i.dependencia_id} for i in result.scalars().all()] p = get_proximo_passo(items) if not p: return None return p