from fastapi import APIRouter, Depends, HTTPException from pydantic import BaseModel from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy import select from app.dependencies import get_db, get_current_user from app.models.child import Child from app.models.rule import RuleItem from app.models.user import User from app.websocket.manager import manager router = APIRouter(prefix="/api/overlays", tags=["overlays"]) class ChildTarget(BaseModel): child_id: int async def _verify_child(child_id: int, user: User, db: AsyncSession) -> Child: result = await db.execute( select(Child).where(Child.id == child_id, Child.user_id == user.id) ) child = result.scalar_one_or_none() if not child: raise HTTPException(status_code=404, detail="Child not found") return child @router.post("/rules/show") async def show_rules_overlay( body: ChildTarget, current_user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): child = await _verify_child(body.child_id, current_user, db) rules_result = await db.execute( select(RuleItem) .where(RuleItem.user_id == current_user.id) .order_by(RuleItem.order_index, RuleItem.id) ) rules = [item.text for item in rules_result.scalars().all()] await manager.broadcast(child.id, {"event": "show_rules", "rules": rules}) return {"ok": True} @router.post("/rules/hide") async def hide_rules_overlay( body: ChildTarget, current_user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): child = await _verify_child(body.child_id, current_user, db) await manager.broadcast(child.id, {"event": "hide_rules"}) return {"ok": True}