import { describe, it, expect } from "vitest";
import { markeerWoordenlijst, WOORDENLIJST_URL } from "./woordenlijst";

const LINK_OPEN = "\uE004";
const LINK_SLUIT = "\uE005";

describe("markeerWoordenlijst", () => {
  it("markeert de eerste keer dat een NL-begrip voorkomt", () => {
    const uit = markeerWoordenlijst("Het goed heeft een erfdienstbaarheid.", "nl");
    expect(uit).toContain(`${LINK_OPEN}erfdienstbaarheid${LINK_SLUIT}`);
  });

  it("markeert elk begrip maar één keer", () => {
    const uit = markeerWoordenlijst("Een hypotheek en nog een hypotheek.", "nl");
    expect(uit.match(new RegExp(LINK_OPEN, "g"))?.length).toBe(1);
  });

  it("slaat koppen, hypothese- en commentaarregels over", () => {
    expect(markeerWoordenlijst("## DE HYPOTHEEK", "nl")).toBe("## DE HYPOTHEEK");
    expect(markeerWoordenlijst("▸ HYPOTHESE — hypotheek:", "nl")).toBe("▸ HYPOTHESE — hypotheek:");
    expect(markeerWoordenlijst("[NAKIJKEN: hypotheek]", "nl")).toBe("[NAKIJKEN: hypotheek]");
  });

  it("gebruikt notaire.be voor het FR-model", () => {
    const uit = markeerWoordenlijst("Le bien est grevé d'une servitude.", "fr");
    expect(uit).toContain(`${LINK_OPEN}servitude${LINK_SLUIT}`);
    expect(WOORDENLIJST_URL.get("servitude")).toContain("notaire.be/lexique/S/servitude");
  });

  it("bouwt de woordenboek-URL volgens de conventie", () => {
    expect(WOORDENLIJST_URL.get("kadastraal inkomen")).toBe(
      "https://www.notaris.be/woordenboek/K/kadastraal-inkomen?locale=nl"
    );
  });
});
