import { openDB, type IDBPDatabase } from "idb";
import type { Kantoor } from "@/data/kantoor";

// ── Lokale opslag van de kantoorinstellingen (singleton) ─────────────────────
// Eén record met vaste sleutel "kantoor". Volgt hetzelfde patroon als de
// dossier-opslag, zodat de gesynchroniseerde opslag-hook (en /api/sync/kantoor)
// er ongewijzigd mee werkt.

/** Kantoorinstellingen zoals bewaard (met vaste id voor de sync-laag). */
export type KantoorRecord = Kantoor & { id: "kantoor" };

const DB_NAME = "notary-kantoor";
const DB_VERSION = 1;

type KantoorDB = {
  kantoor: { key: string; value: KantoorRecord };
};

let dbPromise: Promise<IDBPDatabase<KantoorDB>> | null = null;

function getDb(): Promise<IDBPDatabase<KantoorDB>> {
  if (!dbPromise) {
    dbPromise = openDB<KantoorDB>(DB_NAME, DB_VERSION, {
      upgrade(db, oldVersion) {
        if (oldVersion < 1) db.createObjectStore("kantoor", { keyPath: "id" });
      },
    });
  }
  return dbPromise;
}

export async function alleKantoor(): Promise<KantoorRecord[]> {
  const db = await getDb();
  return db.getAll("kantoor");
}

export async function slaKantoorOp(record: KantoorRecord): Promise<void> {
  const db = await getDb();
  await db.put("kantoor", record);
}

export async function verwijderKantoor(id: string): Promise<void> {
  const db = await getDb();
  await db.delete("kantoor", id);
}
