// src/routes/api/admin/dienststellen/+server.ts
import { json } from '@sveltejs/kit';
import type { RequestHandler } from './$types';
import { prisma } from '$lib/prisma';

// Hilfsfunktion: Erstelle ZeitraumPlaetze-Einträge für eine neue Dienststelle
async function createZeitraumPlaetzeForDienststelle(dienststelleId: number) {
  const zeitraeume = await prisma.praktikumszeitraum.findMany();
  
  // Erstelle für jeden existierenden Zeitraum einen Eintrag mit 0 Plätzen
  for (const zeitraum of zeitraeume) {
    await prisma.zeitraumPlaetze.create({
      data: {
        zeitraumId: zeitraum.id,
        dienststelleId: dienststelleId,
        plaetze: 0 // Standardwert: 0 Plätze
      }
    });
  }
}

export const GET: RequestHandler = async ({ cookies }) => {
  const adminAuth = cookies.get('admin-auth');
  if (adminAuth !== 'authenticated') {
    return json({ error: 'Nicht autorisiert' }, { status: 401 });
  }

  try {
    const dienststellen = await prisma.dienststelle.findMany({
      orderBy: { name: 'asc' }
    });
    return json(dienststellen);
  } catch (error) {
    console.error('Fehler beim Laden der Dienststellen:', error);
    return json({ error: 'Serverfehler' }, { status: 500 });
  }
};

export const POST: RequestHandler = async ({ request, cookies }) => {
  const adminAuth = cookies.get('admin-auth');
  if (adminAuth !== 'authenticated') {
    return json({ error: 'Nicht autorisiert' }, { status: 401 });
  }

  try {
    const { name } = await request.json();

    if (!name) {
      return json({ error: 'Name ist erforderlich' }, { status: 400 });
    }

    const dienststelle = await prisma.dienststelle.create({
      data: {
        name,
        plaetze: 0 // Wird nicht mehr verwendet, aber bleibt im Schema für Kompatibilität
      }
    });

    // Automatisch ZeitraumPlaetze für alle existierenden Zeiträume erstellen
    await createZeitraumPlaetzeForDienststelle(dienststelle.id);

    return json(dienststelle);
  } catch (error: any) {
    console.error('Fehler beim Erstellen der Dienststelle:', error);
    if (error.code === 'P2002') {
      return json({ error: 'Eine Dienststelle mit diesem Namen existiert bereits' }, { status: 400 });
    }
    return json({ error: 'Serverfehler' }, { status: 500 });
  }
};

export const PATCH: RequestHandler = async ({ request, cookies }) => {
  const adminAuth = cookies.get('admin-auth');
  if (adminAuth !== 'authenticated') {
    return json({ error: 'Nicht autorisiert' }, { status: 401 });
  }

  try {
    const { id, name } = await request.json();

    if (!id || !name) {
      return json({ error: 'ID und Name sind erforderlich' }, { status: 400 });
    }

    const dienststelle = await prisma.dienststelle.update({
      where: { id: parseInt(id) },
      data: {
        name
      }
    });

    return json(dienststelle);
  } catch (error: any) {
    console.error('Fehler beim Aktualisieren der Dienststelle:', error);
    if (error.code === 'P2002') {
      return json({ error: 'Eine Dienststelle mit diesem Namen existiert bereits' }, { status: 400 });
    }
    return json({ error: 'Serverfehler' }, { status: 500 });
  }
};

export const DELETE: RequestHandler = async ({ url, cookies }) => {
  const adminAuth = cookies.get('admin-auth');
  if (adminAuth !== 'authenticated') {
    return json({ error: 'Nicht autorisiert' }, { status: 401 });
  }

  try {
    const id = url.searchParams.get('id');
    if (!id) {
      return json({ error: 'ID erforderlich' }, { status: 400 });
    }

    // ZeitraumPlaetze werden automatisch durch onDelete: Cascade gelöscht
    await prisma.dienststelle.delete({
      where: { id: parseInt(id) }
    });

    return json({ success: true });
  } catch (error) {
    console.error('Fehler beim Löschen der Dienststelle:', error);
    return json({ error: 'Serverfehler' }, { status: 500 });
  }
};