"""بوابة أجهزة Veedon (headless) — الواجهة الإدارية هي لوحة local-db-version.

التشغيل مع لوحة Supabase المحلية:
  DATABASE_URL=postgresql://postgres:postgres@127.0.0.1:54322/postgres
"""

import os
from contextlib import asynccontextmanager

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles

from . import (analytics, device, escalation, health, insights, modules, reid,
               reports)
from .db import DATA_DIR, Base, SessionLocal, engine
from .models import seed


@asynccontextmanager
async def lifespan(app: FastAPI):
    # على PG جداول اللوحة موجودة (create_all يتخطاها)؛ على SQLite (اختبارات) يبنيها
    Base.metadata.create_all(engine)
    db = SessionLocal()
    try:
        seed(db)
    finally:
        db.close()
    escalation.start_escalator()   # خيط التصعيد المتدرّج (SOP)
    yield


app = FastAPI(title="Veedon.ai Device Gateway", lifespan=lifespan)
# لوحة الإدارة (متصفّح) ترفع الموديولات لبوابة الأدمن — CORS مفتوح للتطوير
app.add_middleware(CORSMiddleware, allow_origins=["*"], allow_methods=["*"],
                   allow_headers=["*"])
app.include_router(device.router)
app.include_router(reports.router)
app.include_router(health.router)
app.include_router(modules.device_router)
app.include_router(modules.admin_router)
app.include_router(insights.router)
app.include_router(reid.router)
app.include_router(escalation.router)
app.include_router(analytics.router)
# صور الأحداث — اللوحة تعرضها من snapshot_url (اسم الملف UUID غير قابل للتخمين)
app.mount("/snapshots",
          StaticFiles(directory=os.path.join(DATA_DIR, "snapshots")),
          name="snapshots")
