// Helpers serveur autour de Better Auth.
// A utiliser dans les Server Components, layouts et server actions.

import { cache } from "react";
import { headers } from "next/headers";
import { redirect } from "next/navigation";
import { auth, type Session } from "@/lib/auth";

// Lecture de la session active depuis les cookies de la requete entrante.
// `cache()` deduplique l'appel a l'echelle d'un render React.
export const getCurrentSession = cache(async (): Promise<Session | null> => {
  const session = await auth.api.getSession({ headers: await headers() });
  return session ?? null;
});

// Garde pour les routes /portail : exige une session.
export async function requireUser() {
  const session = await getCurrentSession();
  if (!session) redirect("/connexion");
  return session;
}

// Garde pour les routes /atelier-novelia : exige une session avec role admin.
// L'utilisateur connecte sans role admin est renvoye vers son espace client.
export async function requireAdmin() {
  const session = await getCurrentSession();
  if (!session) redirect("/connexion");
  if (session.user.role !== "admin") redirect("/portail");
  return session;
}
