import { describe, it, expect } from "vitest";
import { segmenteer } from "./runs";

const VET_OPEN = "\uE000";
const VET_SLUIT = "\uE001";
const GEEL_OPEN = "\uE002";
const GEEL_SLUIT = "\uE003";

describe("segmenteer", () => {
  it("zet een bedrag tussen vet-markers op vet", () => {
    const segs = segmenteer(`prijs van ${VET_OPEN}100 €${VET_SLUIT}.`);
    const vet = segs.find((s) => s.vet);
    expect(vet?.text).toBe("100 €");
    expect(segs.some((s) => !s.vet && s.text.includes("prijs van"))).toBe(true);
  });

  it("arceert een commentaarhaak geel en ster-markeert ze", () => {
    const segs = segmenteer("tekst [NAKIJKEN] verder");
    const geel = segs.find((s) => s.geel);
    expect(geel?.text).toBe("*[*NAKIJKEN*]*");
    expect(geel?.geel).toBe(true);
  });

  it("arceert een hypotheseregel integraal geel", () => {
    const segs = segmenteer("▸ HYPOTHESE — Iets:");
    expect(segs.every((s) => s.geel)).toBe(true);
  });

  it("zet een geel-gemarkeerde standaardverklaring geel zonder haken", () => {
    const segs = segmenteer(`Standaard ${GEEL_OPEN}er zijn rookmelders${GEEL_SLUIT}.`);
    const geel = segs.find((s) => s.geel);
    expect(geel?.text).toBe("er zijn rookmelders");
  });

  it("kan haken-arcering uitschakelen", () => {
    const segs = segmenteer("tekst [x]", { haken: false });
    expect(segs.every((s) => !s.geel)).toBe(true);
  });

  it("zet een vet+onderlijnd deel (gemeente) correct", () => {
    const segs = segmenteer(`GEMEENTE ${VET_OPEN}${"\uE006"}Tervuren${"\uE007"}${VET_SLUIT}.`);
    const go = segs.find((s) => s.onder);
    expect(go?.text).toBe("Tervuren");
    expect(go?.vet).toBe(true);
    expect(go?.onder).toBe(true);
  });

});
