// ── API: toepasselijke vastgoedopzoekingen en -attesten ──────────────────────
// Dunne schil rond de matrix verplichting × rechtshandeling × gewest in
// data/vastgoed-opzoekingen.ts. Zonder "rechtshandeling"-parameter wordt de
// lijst van rechtshandeling-id's geretourneerd (discovery voor agenten).

import { type NextRequest, NextResponse } from "next/server";
import {
  rechtshandelingen,
  verplichtingen,
  regels,
  type GewestCode,
} from "@/data/vastgoed-opzoekingen";
import { registreerGebruik } from "@/lib/gebruikslog";

const GEWEST_ALIAS: Record<string, GewestCode> = {
  vl: "vl",
  br: "br",
  wa: "wa",
  vlaanderen: "vl",
  brussel: "br",
  "wallonië": "wa",
  wallonie: "wa",
};

export async function GET(request: NextRequest) {
  const q = request.nextUrl.searchParams;
  const rechtshandelingId = q.get("rechtshandeling");

  if (!rechtshandelingId) {
    return NextResponse.json({
      uitleg:
        'Geef "rechtshandeling" (id hieronder) en "gewest" (vl, br of wa) op voor de toepasselijke verplichtingen.',
      rechtshandelingen: rechtshandelingen.map((r) => ({
        id: r.id,
        naam: r.naam,
        aard: r.aard,
        variant: r.variant,
      })),
    });
  }

  const rechtshandeling = rechtshandelingen.find((r) => r.id === rechtshandelingId);
  if (!rechtshandeling) {
    await registreerGebruik({ type: "onbekende_rechtshandeling", waarde: rechtshandelingId });
    return NextResponse.json(
      { fout: `Onbekende rechtshandeling "${rechtshandelingId}" — vraag /api/opzoekingen zonder parameters voor de lijst.` },
      { status: 404 }
    );
  }
  const gewest = GEWEST_ALIAS[(q.get("gewest") ?? "").toLowerCase()];
  if (!gewest) {
    return NextResponse.json(
      { fout: 'Parameter "gewest" vereist — vl, br of wa (of Vlaanderen/Brussel/Wallonië).' },
      { status: 400 }
    );
  }

  const toepasselijk = regels
    .filter((r) => r.rechtshandeling === rechtshandeling.id && r.gewest === gewest)
    .map((r) => {
      const v = verplichtingen.find((x) => x.id === r.verplichting);
      return {
        verplichting: r.verplichting,
        naam: v?.naam ?? r.verplichting,
        scope: v?.scope ?? null,
        status: r.status,
        toelichting: r.toelichting,
        geldigVanaf: r.geldig_vanaf,
        achtergrond: v?.meta ?? null,
        voorwaarde: v?.cond || null,
      };
    });

  return NextResponse.json({
    rechtshandeling: { id: rechtshandeling.id, naam: rechtshandeling.naam, aard: rechtshandeling.aard },
    gewest,
    statusLegende: {
      ja: "verplicht",
      nee: "niet verplicht",
      nuance: "verplicht onder voorwaarden — zie toelichting",
      nvt: "niet van toepassing op deze rechtshandeling",
    },
    verplichtingen: toepasselijk,
  });
}
