// src/routes/api/admin/zeitraum-plaetze/+server.ts
import { json } from '@sveltejs/kit';
import type { RequestHandler } from './$types';
import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

// GET: Plätze für einen bestimmten Zeitraum abrufen
export const GET: RequestHandler = async ({ url, cookies }) => {
  const adminAuth = cookies.get('admin-auth');
  if (adminAuth !== 'authenticated') {
    return json({ error: 'Nicht autorisiert' }, { status: 401 });
  }

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

    const plaetze = await prisma.zeitraumPlaetze.findMany({
      where: { zeitraumId: parseInt(zeitraumId) },
      include: {
        dienststelle: true
      },
      orderBy: {
        dienststelle: { name: 'asc' }
      }
    });

    return json(plaetze);
  } catch (error) {
    console.error('Fehler beim Laden der Plätze:', error);
    return json({ error: 'Serverfehler' }, { status: 500 });
  }
};

// POST: Plätze für einen Zeitraum und Dienststelle aktualisieren
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 { zeitraumId, dienststelleId, plaetze } = await request.json();

    if (!zeitraumId || !dienststelleId || plaetze === undefined) {
      return json({ error: 'Fehlende Parameter' }, { status: 400 });
    }

    const result = await prisma.zeitraumPlaetze.upsert({
      where: {
        zeitraumId_dienststelleId: {
          zeitraumId: parseInt(zeitraumId),
          dienststelleId: parseInt(dienststelleId)
        }
      },
      update: {
        plaetze: parseInt(plaetze)
      },
      create: {
        zeitraumId: parseInt(zeitraumId),
        dienststelleId: parseInt(dienststelleId),
        plaetze: parseInt(plaetze)
      }
    });

    return json(result);
  } catch (error) {
    console.error('Fehler beim Speichern der Plätze:', error);
    return json({ error: 'Serverfehler' }, { status: 500 });
  }
};

// PATCH: Synchronisiert ZeitraumPlaetze wenn neue Dienststellen oder Zeiträume hinzugefügt werden
export const PATCH: RequestHandler = async ({ cookies }) => {
  const adminAuth = cookies.get('admin-auth');
  if (adminAuth !== 'authenticated') {
    return json({ error: 'Nicht autorisiert' }, { status: 401 });
  }

  try {
    // Alle Zeiträume und Dienststellen holen
    const zeitraeume = await prisma.praktikumszeitraum.findMany();
    const dienststellen = await prisma.dienststelle.findMany();

    // Für jede Kombination prüfen ob Eintrag existiert, sonst erstellen
    for (const zeitraum of zeitraeume) {
      for (const dienststelle of dienststellen) {
        await prisma.zeitraumPlaetze.upsert({
          where: {
            zeitraumId_dienststelleId: {
              zeitraumId: zeitraum.id,
              dienststelleId: dienststelle.id
            }
          },
          update: {}, // Nichts updaten wenn bereits vorhanden
          create: {
            zeitraumId: zeitraum.id,
            dienststelleId: dienststelle.id,
            plaetze: dienststelle.plaetze // Standardwert von Dienststelle übernehmen
          }
        });
      }
    }

    return json({ success: true, message: 'Synchronisierung abgeschlossen' });
  } catch (error) {
    console.error('Fehler bei der Synchronisierung:', error);
    return json({ error: 'Serverfehler' }, { status: 500 });
  }
};