"use server";

import { z } from "zod";
import { revalidatePath } from "next/cache";
import { redirect } from "next/navigation";
import { prisma } from "@/lib/prisma";
import { auth } from "@/auth";

const clientSchema = z.object({
  nom_complet: z.string().min(1, "Le nom est requis"),
  telephone: z.string().optional().default(""),
  email: z.string().optional().default(""),
  adresse: z.string().optional().default(""),
  pays: z.string().optional().default("Maroc"),
  numero_identite: z.string().optional().default(""),
  notes: z.string().optional().default(""),
});

export async function createClient(formData: FormData) {
  const session = await auth();
  if (!session) return { error: "Non authentifié" };

  const raw = Object.fromEntries(formData.entries());
  const parsed = clientSchema.safeParse(raw);
  if (!parsed.success) return { error: parsed.error.issues[0].message };

  const client = await prisma.client.create({ data: parsed.data });

  revalidatePath("/clients");
  redirect(`/clients/${client.id}`);
}

export async function updateClient(id: string, formData: FormData) {
  const session = await auth();
  if (!session) return { error: "Non authentifié" };

  const raw = Object.fromEntries(formData.entries());
  const parsed = clientSchema.safeParse(raw);
  if (!parsed.success) return { error: parsed.error.issues[0].message };

  await prisma.client.update({ where: { id }, data: parsed.data });

  revalidatePath("/clients");
  revalidatePath(`/clients/${id}`);
  redirect(`/clients/${id}`);
}

export async function deleteClient(id: string) {
  const session = await auth();
  if (!session) return { error: "Non authentifié" };

  const reservationsCount = await prisma.reservation.count({ where: { client_id: id } });
  if (reservationsCount > 0) {
    return { error: "Ce client a un historique de réservations, suppression interdite." };
  }

  await prisma.client.delete({ where: { id } });
  revalidatePath("/clients");
  return { success: true };
}
