import { cookies } from "next/headers";
import { env } from "@/lib/config";
import type { SuperAdminUser } from "@/lib/api/types";

const SESSION_MAX_AGE_SECONDS = 60 * 60 * 8;

export type Session = {
  // access_token JWT renvoyé par /api/mobile/login.php — TTL ~15min côté backend.
  // Pas de refresh automatique côté panel pour l'instant : le refresh exige
  // un sous-domaine tenant résolu (cf handoff, candidate Q6).
  token: string;
  // refresh_token associé (TTL 7j). Stocké pour un refresh ultérieur si on
  // implémente la rotation, mais non utilisé aujourd'hui.
  refreshToken?: string;
  user: SuperAdminUser;
};

export async function setSession(session: Session): Promise<void> {
  const store = await cookies();
  store.set(env.sessionCookieName, JSON.stringify(session), {
    httpOnly: true,
    secure: env.isProduction,
    sameSite: "lax",
    path: "/",
    maxAge: SESSION_MAX_AGE_SECONDS,
  });
}

export async function getSession(): Promise<Session | null> {
  const store = await cookies();
  const raw = store.get(env.sessionCookieName)?.value;
  if (!raw) return null;
  try {
    const parsed = JSON.parse(raw) as Partial<Session>;
    if (
      typeof parsed.token === "string" &&
      parsed.user &&
      typeof parsed.user === "object" &&
      parsed.user.is_superadmin === true
    ) {
      return parsed as Session;
    }
    return null;
  } catch {
    return null;
  }
}

export async function clearSession(): Promise<void> {
  const store = await cookies();
  store.delete(env.sessionCookieName);
}
