"use server";

import { TypeContact } from "@prisma/client";
import { revalidatePath } from "next/cache";
import { redirect } from "next/navigation";
import { z } from "zod";
import { peutModifierDossiers, utilisateurCourant } from "@/lib/auth";
import { db } from "@/lib/db";

const texte = z
  .string()
  .optional()
  .transform((v) => v?.trim() || null);

const schemaContact = z.object({
  nom: z.string().trim().min(2, "Le nom est obligatoire."),
  type: z.nativeEnum(TypeContact),
  ice: texte.refine((v) => !v || /^\d{15}$/.test(v), "L'ICE compte 15 chiffres."),
  identifiantFiscal: texte,
  rc: texte,
  adresse: texte,
  ville: texte,
  telephone: texte,
  email: texte.refine((v) => !v || z.string().email().safeParse(v).success, "E-mail invalide."),
  notes: texte,
});

export type EtatContact = { erreur?: string; ok?: boolean };

export async function enregistrerContact(id: string | null, _: EtatContact, form: FormData): Promise<EtatContact> {
  const moi = await utilisateurCourant();
  if (!peutModifierDossiers(moi.role)) return { erreur: "Action non autorisée." };
  const r = schemaContact.safeParse(Object.fromEntries(form.entries()));
  if (!r.success) return { erreur: r.error.issues[0].message };
  if (id) {
    await db.contact.update({ where: { id }, data: r.data });
    revalidatePath(`/contacts/${id}`);
    return { ok: true };
  }
  const contact = await db.contact.create({ data: r.data });
  redirect(`/contacts/${contact.id}`);
}
