"""
LegalEase AI — FastAPI entry point
Run: uvicorn backend.main:app --reload --port 8080
"""
from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
from fastapi.middleware.cors import CORSMiddleware
from contextlib import asynccontextmanager
from pathlib import Path
import uvicorn

# ── Routers ────────────────────────────────────────────────
from .routers import auth_router, client_router, lawyer_router, api_router
from .routers import admin_router, office_router, hearing_router
from .services.database import init_db

BASE_DIR = Path(__file__).resolve().parent.parent
templates = Jinja2Templates(directory=str(BASE_DIR / "frontend" / "templates"))


@asynccontextmanager
async def lifespan(app: FastAPI):
    await init_db()
    yield


app = FastAPI(
    title="LegalEase AI",
    description="AI-powered Pakistani civil law platform",
    version="2.0.0",
    lifespan=lifespan,
)

# Wildcard origins cannot be combined with credentials (browsers reject it) —
# list the origins the frontend is actually served from
app.add_middleware(
    CORSMiddleware,
    allow_origins=[
        "http://localhost:8080", "http://127.0.0.1:8080",
        "http://localhost:8000", "http://127.0.0.1:8000",
    ],
    allow_credentials=True,
    allow_methods=["*"], allow_headers=["*"],
)

# ── FYP1 Routers ───────────────────────────────────────────
app.include_router(auth_router.router,   prefix="/api/auth", tags=["Auth"])
app.include_router(client_router.router, prefix="/client",   tags=["Client"])
app.include_router(lawyer_router.router, prefix="/lawyer",   tags=["Lawyer"])
app.include_router(api_router.router,    prefix="/api",      tags=["AI API"])

# ── FYP2 Routers ───────────────────────────────────────────
app.include_router(office_router.router,  prefix="/lawyer",   tags=["Virtual Office"])
app.include_router(admin_router.router,   prefix="/admin",    tags=["Admin"])
app.include_router(hearing_router.router, prefix="/hearing",  tags=["Hearing"])


@app.get("/", response_class=HTMLResponse)
async def home(request: Request):
    return templates.TemplateResponse("index.html", {"request": request})


@app.get("/health")
async def health():
    return {"status": "ok", "version": "2.0.0"}


if __name__ == "__main__":
    uvicorn.run("backend.main:app", host="0.0.0.0", port=8080, reload=True)
