import { NextRequest, NextResponse } from "next/server";

/**
 * Middleware d'auth (version permissive).
 *
 * Stratégie :
 * - On laisse passer toutes les requêtes au middleware (Edge).
 * - La vraie validation de session + rôle se fait dans les layouts server
 *   components via `requireAdmin()` / `requireClient()` (lib/guards.ts).
 *
 * Pourquoi pas un check cookie côté Edge : le naming du cookie Better Auth
 * varie en HTTPS (préfixe __Secure-) selon les environnements et provoque
 * facilement des boucles de redirect false-positive. La perte de perf est
 * minime puisque les guards layout sont eux-mêmes très rapides.
 */

const PROTECTED_PREFIXES = ["/socialexadmin", "/espace-client"];

export function middleware(req: NextRequest) {
  const { pathname } = req.nextUrl;
  const isProtected = PROTECTED_PREFIXES.some((p) => pathname.startsWith(p));
  if (!isProtected) return NextResponse.next();

  // On lit toutes les cookies dont le nom contient "session_token" pour
  // tolérer les variantes de naming (avec/sans préfixe __Secure-, etc.).
  const cookies = req.cookies.getAll();
  const hasSession = cookies.some((c) =>
    c.name.toLowerCase().includes("session_token")
  );

  if (!hasSession) {
    const loginUrl = new URL("/login", req.url);
    loginUrl.searchParams.set("from", pathname);
    return NextResponse.redirect(loginUrl);
  }

  return NextResponse.next();
}

export const config = {
  matcher: ["/socialexadmin/:path*", "/espace-client/:path*"],
};

