"use client";
import { useMemo } from "react";
import { useGesynchroniseerdeOpslag } from "./useGesynchroniseerdeOpslag";
import { getKennisbankDb } from "@/lib/db/kennisbank-db";
import { combineerChecklists, type AkteChecklist } from "@/data/kennisbank-checklists";

async function lokaalLezen(): Promise<AkteChecklist[]> {
  const db = await getKennisbankDb();
  return db.getAll("checklists");
}

async function lokaalSchrijven(checklist: AkteChecklist): Promise<void> {
  const db = await getKennisbankDb();
  await db.put("checklists", checklist);
}

async function lokaalVerwijderen(id: string): Promise<void> {
  const db = await getKennisbankDb();
  await db.delete("checklists", id);
}

/**
 * Akte-checklists: IndexedDB + kantoorbrede sync via
 * /api/sync/kennisbank-checklists. `checklists` is de samengevoegde actuele
 * lijst (seed + opgeslagen bewerkingen; een bewerkte checklist met hetzelfde
 * id vervangt het seed-exemplaar). `verwijder` van een seed-id werkt als
 * "herstel naar de kantoorstandaard".
 */
export function useChecklistsStorage() {
  const { items: opgeslagen, geladen, slaOp, verwijder } =
    useGesynchroniseerdeOpslag<AkteChecklist>(
      "/api/sync/kennisbank-checklists",
      lokaalLezen,
      lokaalSchrijven,
      lokaalVerwijderen
    );

  const checklists = useMemo(() => combineerChecklists(opgeslagen), [opgeslagen]);
  const bewerkteIds = useMemo(() => new Set(opgeslagen.map((c) => c.id)), [opgeslagen]);

  return { checklists, bewerkteIds, geladen, slaOp, verwijder };
}
