import { openDB, type IDBPDatabase } from "idb";
import type { KennisbankAanpassing } from "@/data/conventie-nazicht/aanpassingen";

const DB_NAME = "notary-conventie-nazicht";
const DB_VERSION = 1;

type ConventieNazichtDB = {
  aanpassingen: {
    key: string;
    value: KennisbankAanpassing;
  };
};

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

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

export async function alleKennisbankAanpassingen(): Promise<KennisbankAanpassing[]> {
  const db = await getConventieNazichtDb();
  return db.getAll("aanpassingen");
}

export async function slaKennisbankAanpassingOp(aanpassing: KennisbankAanpassing): Promise<void> {
  const db = await getConventieNazichtDb();
  await db.put("aanpassingen", aanpassing);
}

export async function verwijderKennisbankAanpassing(id: string): Promise<void> {
  const db = await getConventieNazichtDb();
  await db.delete("aanpassingen", id);
}
