import type { NextResponse } from "next/server";
import { SESSION_COOKIE } from "./auth";

/** Cookie de session limité à l’espace admin + API admin (pas envoyé sur la page publique). */
export const SESSION_COOKIE_PATH = "/admin";

export function sessionCookieBase() {
  return {
    httpOnly: true as const,
    sameSite: "lax" as const,
    path: SESSION_COOKIE_PATH,
    secure: process.env.NODE_ENV === "production",
  };
}

function expireOpts(path: string) {
  return {
    httpOnly: true as const,
    sameSite: "lax" as const,
    path,
    secure: process.env.NODE_ENV === "production",
    maxAge: 0,
    expires: new Date(0),
  };
}

/**
 * Next.js `cookies.set` est indexé par **nom** : un second `set` avec le même nom
 * écrase le premier. Pour plusieurs chemins (`/admin` vs `/`), il faut un second
 * en-tête `Set-Cookie` via `headers.append`.
 */
function appendExpiredSessionCookie(res: NextResponse, path: string) {
  const secure = process.env.NODE_ENV === "production";
  const parts = [
    `${SESSION_COOKIE}=`,
    `Path=${path}`,
    "HttpOnly",
    "SameSite=Lax",
    "Max-Age=0",
    "Expires=Thu, 01 Jan 1970 00:00:00 GMT",
  ];
  if (secure) parts.push("Secure");
  res.headers.append("Set-Cookie", parts.join("; "));
}

/**
 * Supprime toutes les variantes connues du cookie de session (évite un ancien `path=/`
 * qui resterait valide après déconnexion et réactiverait la session sur /admin/login).
 */
export function clearAllSessionCookieVariants(res: NextResponse) {
  res.cookies.set(SESSION_COOKIE, "", expireOpts(SESSION_COOKIE_PATH));
  appendExpiredSessionCookie(res, "/");
}

/** À l’issue d’un login réussi : retirer un éventuel cookie legacy `path=/` sans écraser le jeton. */
export function clearLegacyRootSessionCookie(res: NextResponse) {
  appendExpiredSessionCookie(res, "/");
}
