// ── /api/verbetervoorstellen ─────────────────────────────────────────────────
// GET  → lijst van verbetervoorstellen (voor AI-agenten via MCP).
// POST → voeg toe of update (gestuurd door de browser bij elke opslag).
// DELETE?id=... → verwijder.
// Persistentie via Supabase (tabel "verbetervoorstellen"); als de env-vars
// ontbreken geeft GET een lege lijst terug en worden POST/DELETE genegeerd.
// Bevat uitsluitend functionele beschrijvingen — nooit persoonsgegevens.

import { NextResponse } from "next/server";
import { createClient } from "@supabase/supabase-js";
import type { Verbetervoorstel } from "@/data/verbetervoorstellen";

function maakClient() {
  const url = process.env.SUPABASE_URL;
  const key = process.env.SUPABASE_SERVICE_ROLE_KEY;
  if (!url || !key) return null;
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
  return createClient<any>(url, key, { auth: { persistSession: false } });
}

export async function GET(request: Request) {
  const sb = maakClient();
  if (!sb) {
    return NextResponse.json({ voorstellen: [], persistent: false });
  }

  const statusFilter = new URL(request.url).searchParams.get("status");
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
  let query: any = sb.from("verbetervoorstellen").select("data").order("aangemaakt");
  if (statusFilter) query = query.eq("data->>status", statusFilter);

  const { data, error } = await query;
  if (error) return NextResponse.json({ fout: error.message }, { status: 500 });

  const voorstellen = (data ?? []).map((r: { data: unknown }) => r.data);
  return NextResponse.json({
    aantal: voorstellen.length,
    voorstellen,
    persistent: true,
    nota:
      "Verbetervoorstellen voor Notary.AI, gesorteerd op aanmaakdatum. " +
      "Gebruik de velden 'prioriteit' (hoog/midden/laag), 'status', " +
      "'technischeDetails' en 'acceptatiecriteria' voor implementatieplanning. " +
      "Implementeer in volgorde van prioriteit; commit elke aanpassing afzonderlijk.",
  });
}

export async function POST(request: Request) {
  const sb = maakClient();
  if (!sb) return NextResponse.json({ genegeerd: true });

  let voorstel: Verbetervoorstel;
  try {
    voorstel = (await request.json()) as Verbetervoorstel;
  } catch {
    return NextResponse.json({ fout: "Ongeldige JSON." }, { status: 400 });
  }

  const { error } = await sb
    .from("verbetervoorstellen")
    .upsert({ id: voorstel.id, data: voorstel });
  if (error) return NextResponse.json({ fout: error.message }, { status: 500 });

  return NextResponse.json({ opgeslagen: voorstel.id });
}

export async function DELETE(request: Request) {
  const sb = maakClient();
  if (!sb) return NextResponse.json({ genegeerd: true });

  const id = new URL(request.url).searchParams.get("id");
  if (!id) return NextResponse.json({ fout: "'id' is verplicht." }, { status: 400 });

  const { error } = await sb.from("verbetervoorstellen").delete().eq("id", id);
  if (error) return NextResponse.json({ fout: error.message }, { status: 500 });

  return NextResponse.json({ verwijderd: id });
}
