import { PrismaClient } from '@prisma/client';
import { writeFile } from 'fs/promises';
import { randomUUID } from 'crypto';
import { json } from '@sveltejs/kit';

const prisma = new PrismaClient();

export async function POST({ request }) {
  const formData = await request.formData();

  const get = (key: string) => formData.get(key)?.toString() ?? '';

  const pdfs = formData.getAll('pdfs') as File[];

  const gespeichertePfade: string[] = [];

  for (const pdf of pdfs) {
    if (pdf.size > 0 && pdf.type === 'application/pdf') {
      const buffer = Buffer.from(await pdf.arrayBuffer());
      const dateiname = `${randomUUID()}.pdf`;
      const pfad = `/uploads/${dateiname}`;
      await writeFile(`static${pfad}`, buffer);
      gespeichertePfade.push(pfad);
    }
  }

  try {
    await prisma.anmeldung.create({
      data: {
        anrede: get('anrede'),
        vorname: get('vorname'),
        nachname: get('nachname'),
        geburtsdatum: get('geburtsdatum'),
        strasse: get('strasse'),
        hausnummer: get('hausnummer'),
        ort: get('ort'),
        plz: get('plz'),
        telefon: get('telefon'),
        email: get('email'),
        schulart: get('schulart'),
        zeitraum: get('zeitraum'),
        motivation: get('motivation'),
        wunsch1Id: parseInt(get('wunsch1Id')),
        wunsch2Id: parseInt(get('wunsch2Id')),
        wunsch3Id: parseInt(get('wunsch3Id')),
        pdfs: {
          create: gespeichertePfade.map((pfad) => ({ pfad }))
        }
      }
    });

    return json({ success: true });
  } catch (err: unknown) {
    if (err instanceof Error && (err as { code?: string }).code === 'P2002') {
      return json({ error: 'Diese E-Mail wurde bereits verwendet.' }, { status: 400 });
    }

    console.error(err);
    return json({ error: 'Fehler beim Speichern.' }, { status: 500 });
  }
}