import { describe, it, expect } from "vitest";
import { vindOverdrachtsgrensSchendingen } from "./overdrachtsgrensLint";

describe("vindOverdrachtsgrensSchendingen", () => {
  it("geeft een lege lijst voor zelfstandige tekst zonder agent-1-verwijzingen", () => {
    expect(vindOverdrachtsgrensSchendingen("Vul het ontwerp in met de werkelijke dossiergegevens.")).toEqual([]);
  });

  it("meldt een MCP-toolnaam als schending, altijd (geen uitzondering)", () => {
    const schendingen = vindOverdrachtsgrensSchendingen("Roep genereerWerkdossierAlsWord aan om het document te regenereren.");
    expect(schendingen.map((s) => s.term)).toContain("genereerWerkdossierAlsWord");
  });

  it("meldt een MCP-toolnaam ook wanneer de regel een toegelaten formulering bevat (geen uitzondering voor toolnamen)", () => {
    const schendingen = vindOverdrachtsgrensSchendingen("Indien je toegang hebt, roep dan haalModeldocument aan.");
    expect(schendingen.map((s) => s.term)).toContain("haalModeldocument");
  });

  it("meldt een contextpatroon zoals 'sessie-ID' of 'dossier-ID' als schending", () => {
    expect(vindOverdrachtsgrensSchendingen("Gebruik het dossier-ID uit de vorige sessie.").length).toBeGreaterThan(0);
    expect(vindOverdrachtsgrensSchendingen("Herneem je sessie-ID van agent 1.").length).toBeGreaterThan(0);
  });

  it("meldt 'zoals eerder besproken' en verwijzingen naar een vorig bericht", () => {
    expect(vindOverdrachtsgrensSchendingen("Werk verder zoals eerder besproken.").length).toBeGreaterThan(0);
    expect(vindOverdrachtsgrensSchendingen("Zie je vorige bericht voor de details.").length).toBeGreaterThan(0);
  });

  it("laat een contextpatroon-treffer NIET meetellen wanneer de regel een toegelaten, gracieus-degraderende formulering bevat", () => {
    // Fictief voorbeeld: een gedachte-experiment-zin die toevallig "dossier-ID" bevat
    // maar wél voorwaardelijk/optioneel geformuleerd is.
    const regel = "Heb je toegang tot het dossier-ID-systeem, gebruik het dan; anders is dat geen blokkering.";
    expect(vindOverdrachtsgrensSchendingen(regel)).toEqual([]);
  });

  it("de bestaande, legitieme zelfrapportage-formulering over Notary.AI-toegang triggert geen schending", () => {
    const regel =
      "Meld of je in deze sessie toegang had tot alle Notary.AI-diensten (MCP-tools, API-acties of de webbibliotheek).";
    expect(vindOverdrachtsgrensSchendingen(regel)).toEqual([]);
  });

  it("werkt regel per regel: een schending op regel 3 wordt gerapporteerd met haar eigen regeltekst", () => {
    const tekst = "Regel 1 is schoon.\nRegel 2 is schoon.\nRoep berekenAktekosten aan hier.";
    const schendingen = vindOverdrachtsgrensSchendingen(tekst);
    expect(schendingen).toHaveLength(1);
    expect(schendingen[0].regel).toContain("berekenAktekosten");
  });
});
