import { describe, it, expect, beforeEach } from "vitest";
import { registreerGebruik, gebruikslogOpslag, stelGebruikslogOpslagIn, type GebruikslogEvent } from "./gebruikslog";

class TestOpslag {
  events: GebruikslogEvent[] = [];
  async registreer(event: Omit<GebruikslogEvent, "tijdstip">) {
    this.events.push({ ...event, tijdstip: "2026-06-21T00:00:00.000Z" });
  }
  async lijst() {
    return [...this.events];
  }
}

describe("gebruikslog", () => {
  let opslag: TestOpslag;

  beforeEach(() => {
    opslag = new TestOpslag();
    stelGebruikslogOpslagIn(opslag);
  });

  it("registreerGebruik voegt een event toe aan de actieve opslag", async () => {
    await registreerGebruik({ type: "onbekend_modeldocument", waarde: "bestaat-niet" });
    const events = await gebruikslogOpslag().lijst();
    expect(events).toHaveLength(1);
    expect(events[0].type).toBe("onbekend_modeldocument");
    expect(events[0].waarde).toBe("bestaat-niet");
  });

  it("registreerGebruik faalt nooit, ook niet als de opslag een fout gooit", async () => {
    stelGebruikslogOpslagIn({
      registreer: async () => {
        throw new Error("opslag onbereikbaar");
      },
      lijst: async () => [],
    });
    await expect(
      registreerGebruik({ type: "onbekende_modelbrief", waarde: "x" })
    ).resolves.toBeUndefined();
  });
});
