// Lichte login-gate: enkel actief als APP_WACHTWOORD + APP_AUTH_SECRET
// gezet zijn (zie lib/auth.ts). Beschermt de browser-UI-paginas en de
// interne /api/sync/*-routes (browser-naar-browser sync). De publieke
// REST-API voor externe AI-agenten (M365 Copilot, Claude) blijft expliciet
// onbeschermd — anders breekt die integratie.

import { NextResponse, type NextRequest } from "next/server";
import { heeftAuthGate, valideerSessieCookie, SESSIE_COOKIE_NAAM } from "@/lib/auth";

const PUBLIEKE_PADEN = [
  "/login",
  "/api/auth/login",
  "/api/auth/logout",
  "/api/aktekosten",
  "/api/modeldocumenten",
  "/api/opzoekingen",
  "/api/modelbrieven",
  "/api/verbetervoorstellen",
  "/api/kennisbank",
  "/api/mcp",
  "/api/openapi.json",
  "/api/check-actualiteit",
];

function isPubliekPad(pad: string): boolean {
  if (pad.startsWith("/_next/") || pad === "/favicon.ico") return true;
  return PUBLIEKE_PADEN.some((p) => pad === p || pad.startsWith(`${p}/`));
}

export function proxy(request: NextRequest) {
  if (!heeftAuthGate()) return NextResponse.next();

  const { pathname } = request.nextUrl;
  if (isPubliekPad(pathname)) return NextResponse.next();

  const token = request.cookies.get(SESSIE_COOKIE_NAAM)?.value;
  if (valideerSessieCookie(token)) return NextResponse.next();

  if (pathname.startsWith("/api/sync/")) {
    return NextResponse.json({ error: "Niet ingelogd" }, { status: 401 });
  }

  const loginUrl = new URL("/login", request.url);
  loginUrl.searchParams.set("from", pathname);
  return NextResponse.redirect(loginUrl);
}

export const config = {
  matcher: ["/((?!_next/static|_next/image|favicon.ico).*)"],
};
