// ── /api/kennisbank/checklists — publieke REST-API voor AI-agenten ──────────
// GET → de akte-checklists (cruciaal/belangrijk/nuttig/overbodig per punt) en
// de track-changes-werkwijze voor het aanpassen van teksten van derden.
// Raadplegen is vrij (regime GENEREREN/OPZOEKEN). Wijzigen gebeurt door de
// notaris in de UI; een agent die een aanvulling wil voorstellen, gebruikt
// voegKennisVoorstelToe met een verwijzing naar de checklist en het punt.
// Bevat uitsluitend generieke kantoorkennis — nooit persoonsgegevens.

import { NextResponse } from "next/server";
import { maakServiceClient } from "@/lib/supabase/server";
import {
  TRACK_CHANGES_WERKWIJZE,
  combineerChecklists,
  vindChecklistVoorAkteType,
  type AkteChecklist,
} from "@/data/kennisbank-checklists";

async function haalOpgeslagenChecklists(): Promise<AkteChecklist[]> {
  const sb = maakServiceClient();
  if (!sb) return [];
  const { data, error } = await sb
    .from("kennisbank_checklists")
    .select("data")
    .order("aangepast");
  if (error) throw new Error(`Supabase kennisbank_checklists: ${error.message}`);
  return (data ?? []).map((r: { data: unknown }) => r.data as AkteChecklist);
}

export async function GET(request: Request) {
  const params = new URL(request.url).searchParams;
  const akteType = params.get("akteType");

  let opgeslagen: AkteChecklist[] = [];
  try {
    opgeslagen = await haalOpgeslagenChecklists();
  } catch (e) {
    return NextResponse.json({ fout: (e as Error).message }, { status: 500 });
  }

  const checklists = combineerChecklists(opgeslagen);

  if (akteType) {
    const checklist = vindChecklistVoorAkteType(akteType, checklists);
    if (!checklist) {
      return NextResponse.json(
        {
          fout: `Geen checklist voor akteType "${akteType}".`,
          beschikbaar: checklists.map((c) => c.akteType),
        },
        { status: 404 }
      );
    }
    return NextResponse.json({ checklist, werkwijze: TRACK_CHANGES_WERKWIJZE });
  }

  return NextResponse.json({
    aantal: checklists.length,
    checklists,
    werkwijze: TRACK_CHANGES_WERKWIJZE,
    nota:
      "Akte-checklists van het kantoor: elk punt draagt een gewicht — " +
      "cruciaal (moet aanwezig én correct zijn), belangrijk (controleren en " +
      "corrigeren), nuttig (toevoegen als het weinig moeite kost) of " +
      "overbodig (mag gemotiveerd geschrapt worden uit teksten van derden). " +
      "Pas je een tekst van een derde aan, volg dan de meegeleverde " +
      "'werkwijze' (track changes) en de gewichtHandeling per punt. " +
      "Gewestgebonden punten gelden enkel voor het vermelde gewest. " +
      "Aanvullingen voorstellen kan via voegKennisVoorstelToe, met " +
      "vermelding van checklist- en punt-id.",
  });
}
