// ── API: indicatieve aktekostenafrekening ────────────────────────────────────
// Dunne schil rond berekenAkteKostenOverzicht (data/ereloon.ts) — de enige
// bron van waarheid voor "wat kost deze akte met de standaardopties".

import { type NextRequest, NextResponse } from "next/server";
import {
  berekenAkteKostenOverzicht,
  actieveAkteTypen,
  type AkteType,
  type GewestEreloon,
  type SchenkingsWijze,
} from "@/data/ereloon";
import { parseBedragInvoer } from "@/lib/format";

const GEWESTEN: GewestEreloon[] = ["Vlaanderen", "Brussel", "Wallonië"];
const SCHENKINGS_WIJZEN: SchenkingsWijze[] = ["voorschot", "buiten_deel"];

function fout(boodschap: string) {
  return NextResponse.json({ fout: boodschap }, { status: 400 });
}

export function GET(request: NextRequest) {
  const q = request.nextUrl.searchParams;

  const akteType = q.get("akteType") as AkteType | null;
  if (!akteType || !actieveAkteTypen.includes(akteType)) {
    return fout(`Parameter "akteType" vereist — één van: ${actieveAkteTypen.join(", ")}.`);
  }
  // API-veilige variant: "250000.5" is hier een decimaal getal, geen
  // duizendtal-notatie (parseBedrag zou er 2.500.005 van maken).
  const bedrag = parseBedragInvoer(q.get("bedrag") ?? "");
  if (bedrag <= 0) {
    return fout('Parameter "bedrag" vereist — positief bedrag in euro (bv. 350000).');
  }
  const gewest = (q.get("gewest") ?? "Vlaanderen") as GewestEreloon;
  if (!GEWESTEN.includes(gewest)) {
    return fout(`Parameter "gewest" — één van: ${GEWESTEN.join(", ")}.`);
  }
  const schenkingsWijze = q.get("schenkingsWijze") as SchenkingsWijze | null;
  if (schenkingsWijze && !SCHENKINGS_WIJZEN.includes(schenkingsWijze)) {
    return fout(`Parameter "schenkingsWijze" — één van: ${SCHENKINGS_WIJZEN.join(", ")}.`);
  }
  const aantalOverdragers = Number(q.get("aantalOverdragers") ?? "1");
  const aantalPandregister = Number(q.get("aantalPandregister") ?? "2");
  if (!Number.isInteger(aantalOverdragers) || aantalOverdragers < 1) {
    return fout('Parameter "aantalOverdragers" — geheel getal ≥ 1.');
  }
  if (!Number.isInteger(aantalPandregister) || aantalPandregister < 0) {
    return fout('Parameter "aantalPandregister" — geheel getal ≥ 0.');
  }

  const extraLeveringskostenParam = q.get("extraLeveringskosten");
  const extraLeveringskostenIds = extraLeveringskostenParam === null
    ? []
    : extraLeveringskostenParam.split(",").map((v) => v.trim()).filter(Boolean);

  const overzicht = berekenAkteKostenOverzicht(akteType, bedrag, gewest, {
    schenkingsWijze: schenkingsWijze ?? undefined,
    eigenWoning: q.get("eigenWoning") === "true",
    aantalPandregister,
    aantalOverdragers,
    extraLeveringskostenIds,
  });

  return NextResponse.json({
    invoer: {
      akteType,
      bedrag,
      gewest,
      schenkingsWijze,
      aantalOverdragers,
      aantalPandregister,
      extraLeveringskostenIds,
    },
    disclaimer:
      "Indicatieve afrekening met standaardopties, excl. registratie-/schenkbelasting. " +
      "Honoraria KB 16.12.1950 (geïndexeerd 01/01/2026); btw-vrije posten conform KB 14.09.2016. " +
      "Raadpleeg het notariskantoor te Tervuren voor een definitieve afrekening.",
    overzicht,
  });
}
