import { describe, it, expect } from "vitest";
import { zetSpellingtaalInStyles, spellingtaalCode } from "./sjabloonTaal";

const stylesMet = (langVal: string) =>
  `<w:styles><w:docDefaults><w:rPrDefault><w:rPr>` +
  `<w:lang w:val="${langVal}" w:eastAsia="en-US" w:bidi="ar-SA"/>` +
  `</w:rPr></w:rPrDefault></w:docDefaults>` +
  // Een benoemde stijl met een eigen, doelbewuste taal die ONGEMOEID moet blijven.
  `<w:style w:styleId="Code"><w:rPr><w:lang w:val="en-US"/></w:rPr></w:style></w:styles>`;

describe("zetSpellingtaalInStyles", () => {
  it("zet de docDefaults-taal op nl-BE (NL) resp. fr-BE (FR)", () => {
    expect(zetSpellingtaalInStyles(stylesMet("fr-FR"), "nl")).toContain('<w:lang w:val="nl-BE" w:eastAsia="en-US" w:bidi="ar-SA"/>');
    expect(zetSpellingtaalInStyles(stylesMet("nl-BE"), "fr")).toContain('<w:lang w:val="fr-BE" w:eastAsia="en-US" w:bidi="ar-SA"/>');
  });

  it("laat eastAsia/bidi en de taal van benoemde stijlen ongemoeid", () => {
    const uit = zetSpellingtaalInStyles(stylesMet("fr-FR"), "nl");
    // eastAsia/bidi in docDefaults blijven staan.
    expect(uit).toContain('w:eastAsia="en-US"');
    expect(uit).toContain('w:bidi="ar-SA"');
    // De benoemde stijl "Code" behoudt zijn eigen en-US.
    expect(uit).toContain('<w:style w:styleId="Code"><w:rPr><w:lang w:val="en-US"/></w:rPr></w:style>');
  });

  it("wijzigt niets bij een onverwachte structuur zonder docDefaults", () => {
    const zonder = `<w:styles><w:style w:styleId="X"><w:rPr><w:lang w:val="en-US"/></w:rPr></w:style></w:styles>`;
    expect(zetSpellingtaalInStyles(zonder, "nl")).toBe(zonder);
  });

  it("spellingtaalCode geeft de Belgische varianten terug", () => {
    expect(spellingtaalCode("nl")).toBe("nl-BE");
    expect(spellingtaalCode("fr")).toBe("fr-BE");
  });
});
