// Rechtstexte (Impressum, AGB, Datenschutz, Widerrufsbelehrung) — seit 03.08.2026 admin-editierbar
// (siehe public/admin/config.yml, Collections "impressum"/"agb"/"datenschutz"/"widerruf") statt
// fest im Code zu stehen. Jede Seite besteht aus einer frei bearbeitbaren Liste von Abschnitten
// (Überschrift + Text) — so kann VanVan selbst Abschnitte ergänzen/ändern/löschen, wenn sich z.B.
// Gesetze ändern oder ein neuer Dienstleister hinzukommt, ohne dass Code angefasst werden muss.

// @ts-ignore -- JSON-Import, zur Build-Zeit von Astro/Vite aufgelöst
import impressumRaw from "../content/impressum.json";
// @ts-ignore
import agbRaw from "../content/agb.json";
// @ts-ignore
import datenschutzRaw from "../content/datenschutz.json";
// @ts-ignore
import widerrufRaw from "../content/widerruf.json";

export interface LegalSection {
  heading: string;
  body: string;
}

export interface LegalPage {
  sections: LegalSection[];
}

export interface ImpressumDaten extends LegalPage {
  /** USt-IdNr. — optional (Kleinunternehmer nach §19 UStG haben oft keine), admin-editierbar,
   *  bewusst als eigenes Feld statt Teil des freien Fließtexts, damit sie nicht versehentlich beim
   *  Bearbeiten des Umsatzsteuer-Absatzes mitgelöscht wird. */
  ustId?: string;
}

export const impressum = impressumRaw as ImpressumDaten;
export const agb = agbRaw as LegalPage;
export const datenschutz = datenschutzRaw as LegalPage;
export const widerruf = widerrufRaw as LegalPage;

/** Wandelt einen frei im Adminbereich editierbaren Rechtstext-Absatz SICHER in HTML um:
 *  1. Escaped zuerst konsequent ALLES (&, <, >) — ein Tippfehler mit einem "<" im Admin kann so
 *     nie das Seiten-Layout kaputt machen oder (im denkbar schlimmsten Fall) Schadcode einschleusen.
 *  2. Verlinkt danach automatisch nackte URLs (z.B. den EU-Streitschlichtung-Link) zu echten,
 *     klickbaren <a>-Tags — ganz ohne dass VanVan im Admin HTML schreiben müsste.
 *  3. Leerzeilen werden zu neuen Absätzen, einzelne Zeilenumbrüche zu <br> (z.B. für Adresszeilen). */
export function rechtstextAlsHtml(body: string): string {
  const escaped = (body ?? "")
    .replace(/&/g, "&amp;")
    .replace(/</g, "&lt;")
    .replace(/>/g, "&gt;");
  const linkifiziert = escaped.replace(
    /(https?:\/\/[^\s<]+)/g,
    (url) => {
      // Satzzeichen am Ende (Punkt, Komma, Klammer, ...) gehören zum Satz, nicht zum Link —
      // sonst landet z.B. der Punkt am Satzende mit im href/Linktext.
      const match = url.match(/^(.*?)([.,;:!?)]*)$/);
      const [, reinerLink, satzzeichen] = match ?? [null, url, ""];
      return `<a href="${reinerLink}" target="_blank" rel="noopener">${reinerLink}</a>${satzzeichen}`;
    }
  );
  return linkifiziert
    .split(/\n\s*\n/)
    .filter((absatz) => absatz.trim().length > 0)
    .map((absatz) => `<p>${absatz.trim().replace(/\n/g, "<br />")}</p>`)
    .join("");
}
