"use server";

import bcrypt from "bcryptjs";
import { cookies } from "next/headers";
import { redirect } from "next/navigation";
import { db } from "@/lib/db";
import { COOKIE_SESSION, optionsCookie, signerSession } from "@/lib/session";

export type EtatConnexion = { erreur?: string; email?: string };

export async function seConnecter(_: EtatConnexion, form: FormData): Promise<EtatConnexion> {
  const email = String(form.get("email") ?? "").trim().toLowerCase();
  const motDePasse = String(form.get("motDePasse") ?? "");
  const utilisateur = await db.utilisateur.findUnique({ where: { email } });
  const valide = utilisateur?.actif && (await bcrypt.compare(motDePasse, utilisateur.motDePasse));
  if (!utilisateur || !valide) return { erreur: "E-mail ou mot de passe incorrect.", email };

  const jeton = await signerSession({ uid: utilisateur.id, role: utilisateur.role, nom: utilisateur.nom });
  (await cookies()).set(COOKIE_SESSION, jeton, optionsCookie);
  redirect("/");
}

export async function seDeconnecter() {
  (await cookies()).delete(COOKIE_SESSION);
  redirect("/connexion");
}
