from __future__ import annotations from fastapi import APIRouter, Depends, Query from app.api.deps import CurrentAdmin, get_services from app.models.schemas import ApiMessage, BroadcastRequest, CreditAdjustmentRequest from app.services.container import Services router = APIRouter(prefix="/admin", tags=["admin"]) @router.get("/stats") async def stats(_: CurrentAdmin, services: Services = Depends(get_services)) -> dict: return await services.admin.dashboard_snapshot() @router.get("/users") async def list_users( _: CurrentAdmin, services: Services = Depends(get_services), query: str | None = Query(default=None), limit: int = Query(default=50, ge=1, le=200), ) -> list[dict]: return await services.admin.list_users(query=query, limit=limit) @router.get("/jobs") async def list_jobs( _: CurrentAdmin, services: Services = Depends(get_services), limit: int = Query(default=50, ge=1, le=200), ) -> list[dict]: return await services.admin.list_jobs(limit=limit) @router.post("/credits/grant") async def grant_credits( payload: CreditAdjustmentRequest, admin_user: CurrentAdmin, services: Services = Depends(get_services), ) -> dict: return await services.admin.grant_credits(admin_user.id or "", payload) @router.post("/broadcasts", response_model=ApiMessage) async def broadcast( payload: BroadcastRequest, admin_user: CurrentAdmin, services: Services = Depends(get_services), ) -> ApiMessage: result = await services.admin.queue_broadcast(admin_user.id or "", payload) return ApiMessage(message="Broadcast queued.", details=result)