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

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

  try {
    // Lade alle Zeiträume mit ihren ZeitraumPlaetze-Einträgen
    const zeitraeume = await prisma.praktikumszeitraum.findMany({
      include: {
        zeitraumPlaetze: {
          include: {
            dienststelle: true
          },
          orderBy: {
            dienststelle: {
              name: 'asc'
            }
          }
        }
      },
      orderBy: {
        startDatum: 'desc'
      }
    });

    // Transformiere die Daten in das gewünschte Format
    const result = zeitraeume.map(zeitraum => ({
      zeitraumId: zeitraum.id,
      zeitraumBezeichnung: zeitraum.bezeichnung,
      dienststellen: zeitraum.zeitraumPlaetze.map(zp => ({
        id: zp.id,
        dienststelleId: zp.dienststelleId,
        dienststelleName: zp.dienststelle.name,
        plaetze: zp.plaetze
      }))
    }));

    return json(result);
  } catch (error) {
    console.error('Fehler beim Laden der Plätze:', error);
    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 { zeitraumId, dienststelleId, plaetze } = await request.json();

    if (!zeitraumId || !dienststelleId || plaetze === undefined) {
      return json({ error: 'Zeitraum-ID, Dienststellen-ID und Plätze sind erforderlich' }, { status: 400 });
    }

    const plaetzeInt = parseInt(plaetze);
    if (isNaN(plaetzeInt) || plaetzeInt < 0) {
      return json({ error: 'Plätze muss eine gültige Zahl ≥ 0 sein' }, { status: 400 });
    }

    // Aktualisiere oder erstelle den Eintrag
    const updated = await prisma.zeitraumPlaetze.upsert({
      where: {
        zeitraumId_dienststelleId: {
          zeitraumId: parseInt(zeitraumId),
          dienststelleId: parseInt(dienststelleId)
        }
      },
      update: {
        plaetze: plaetzeInt
      },
      create: {
        zeitraumId: parseInt(zeitraumId),
        dienststelleId: parseInt(dienststelleId),
        plaetze: plaetzeInt
      }
    });

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