"use server";

import { revalidatePath } from "next/cache";
import { UserRole } from "@prisma/client";
import { z } from "zod";

import { requireRole } from "@/lib/auth-utils";
import { prisma } from "@/lib/prisma";

const educatorSchema = z.object({
  firstName: z.string().min(1, "Vorname ist erforderlich").max(100).trim(),
  lastName: z.string().min(1, "Nachname ist erforderlich").max(100).trim(),
  active: z.boolean().default(true),
});

export async function createEducator(rawPayload: unknown) {
  const session = await requireRole([UserRole.ADMIN]);
  const kitaId = session.user.kitaId;
  if (!kitaId) {
    return { error: "Kein Mandant zugeordnet." };
  }
  
  const parsed = educatorSchema.safeParse(rawPayload);
  if (!parsed.success) {
    return { error: "Ungültige Eingabedaten." };
  }
  
  try {
    await prisma.educator.create({
      data: {
        kitaId,
        firstName: parsed.data.firstName,
        lastName: parsed.data.lastName,
        active: parsed.data.active,
      },
    });
    
    revalidatePath("/dashboard/erzieher");
    return { success: true };
  } catch (error) {
    console.error("Fehler beim Anlegen:", error);
    return { error: "Ein Fehler ist aufgetreten." };
  }
}

export async function updateEducator(id: string, rawPayload: unknown) {
  const session = await requireRole([UserRole.ADMIN]);
  const kitaId = session.user.kitaId;
  if (!kitaId) {
    return { error: "Kein Mandant zugeordnet." };
  }
  
  const parsed = educatorSchema.safeParse(rawPayload);
  if (!parsed.success) {
    return { error: "Ungültige Eingabedaten." };
  }
  
  try {
    await prisma.educator.update({
      where: {
        id,
        kitaId,
      },
      data: {
        firstName: parsed.data.firstName,
        lastName: parsed.data.lastName,
        active: parsed.data.active,
      },
    });
    
    revalidatePath("/dashboard/erzieher");
    return { success: true };
  } catch (error) {
    console.error("Fehler beim Aktualisieren:", error);
    return { error: "Ein Fehler ist aufgetreten." };
  }
}

export async function deleteEducator(id: string) {
  const session = await requireRole([UserRole.ADMIN]);
  const kitaId = session.user.kitaId;
  if (!kitaId) {
    return { error: "Kein Mandant zugeordnet." };
  }
  
  try {
    await prisma.educator.delete({
      where: {
        id,
        kitaId,
      },
    });
    
    revalidatePath("/dashboard/erzieher");
    return { success: true };
  } catch (error) {
    console.error("Fehler beim Löschen:", error);
    return { error: "Ein Fehler ist aufgetreten." };
  }
}
