import { PrismaClient } from '@prisma/client';
import { json } from '@sveltejs/kit';
import type { RequestHandler } from './$types';

const prisma = new PrismaClient();

function checkAuth(cookies: unknown) {
  return cookies.get('admin_session') === 'true';
}

export const GET: RequestHandler = async ({ cookies }) => {
  if (!checkAuth(cookies)) return new Response('Nicht erlaubt', { status: 401 });
  const dienststellen = await prisma.dienststelle.findMany({ orderBy: { name: 'asc' } });
  return json(dienststellen);
};

export const POST: RequestHandler = async ({ cookies, request }) => {
  if (!checkAuth(cookies)) return new Response('Nicht erlaubt', { status: 401 });
  const { name, plaetze } = await request.json();
  if (typeof plaetze !== 'number' || plaetze < 0) {
    return json({ error: 'Ungültige Anzahl an Plätzen' }, { status: 400 });
  }
  try {
    const created = await prisma.dienststelle.create({ data: { 
      name,
      plaetze,
    } });
    return json(created);
  } catch (e) {
    console.error('Fehler beim Hinzufuegen:', e);
    return json({ error: 'Dienststelle existiert bereits' }, { status: 400 });
  }
};

export const PATCH: RequestHandler = async ({ cookies, request }) => {
  if (!checkAuth(cookies)) return new Response('Nicht erlaubt', { status: 401 });

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

  if (typeof id !== 'number' || isNaN(id) || !name || typeof plaetze !== 'number' || plaetze < 0) {
    return json({ error: 'Ungültige Eingabedaten' }, { status: 400 });
  }

  const existing = await prisma.dienststelle.findUnique({ where: { id } });
  if (!existing) {
    return json({ error: 'Dienststelle nicht gefunden' }, { status: 404 });
  }

  const konflikt = await prisma.dienststelle.findFirst({
    where: {
      name,
      NOT: { id },
    },
  });
  if (konflikt) {
    return json({ error: 'Eine andere Dienststelle mit diesem Namen existiert bereits' }, { status: 400 });
  }

  try {
    const updated = await prisma.dienststelle.update({
      where: { id },
      data: { name, plaetze },
    });
    return json(updated);
  } catch (e) {
    console.error('Fehler beim Update:', e);
    return json({ error: 'Update fehlgeschlagen' }, { status: 400 });
  }
};

export const DELETE: RequestHandler = async ({ cookies, url }) => {
  if (!checkAuth(cookies)) return new Response('Nicht erlaubt', { status: 401 });
  const id = Number(url.searchParams.get('id'));
  await prisma.dienststelle.delete({ where: { id } });
  return json({ success: true });
};