"""Global search across schools, invoices, tickets.""" from fastapi import APIRouter, Depends, Query from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy import select from app.auth.dependencies import require_super_admin from app.database import get_db from app.models.user import HubUser from app.models.school import School from app.models.billing import Invoice from app.models.ticket import SupportTicket router = APIRouter(prefix="/api/search", tags=["search"]) @router.get("") async def global_search( q: str = Query(..., min_length=2), _admin: HubUser = Depends(require_super_admin), db: AsyncSession = Depends(get_db), ): """Search across schools, invoices, and tickets. Returns up to 5 per category.""" pattern = f"%{q}%" schools = (await db.execute( select(School).where(School.name.ilike(pattern)).limit(5) )).scalars().all() invoices = (await db.execute( select(Invoice).where(Invoice.invoice_number.ilike(pattern)).limit(5) )).scalars().all() tickets = (await db.execute( select(SupportTicket).where( SupportTicket.subject.ilike(pattern) | SupportTicket.ticket_number.ilike(pattern) ).limit(5) )).scalars().all() return { "schools": [{"id": s.id, "name": s.name, "status": s.status.value, "type": "school"} for s in schools], "invoices": [{"id": i.id, "invoice_number": i.invoice_number, "total_amount": float(i.total_amount), "status": i.status.value, "type": "invoice"} for i in invoices], "tickets": [{"id": t.id, "ticket_number": t.ticket_number, "subject": t.subject, "status": t.status.value, "type": "ticket"} for t in tickets], }