(function registerWartaTravelPolicyParser(globalScope) {
  "use strict";
  const registry = globalScope.PolicyPdfParserRegistry;
  const common = globalScope.WartaPolicyParserCommon;
  const helpers = globalScope.PolicyPdfParserHelpers;
  if (!registry || !common || !helpers) throw new Error("Najpierw wczytaj wspólny parser Warty.");

  function findTravelRiskSummary(allText) {
    const lines = String(allText ?? "").split(/\r?\n/);
    const normalizedLines = lines.map(helpers.normalizeForDetection);
    const startIndex = normalizedLines.findIndex((line) => /^UBEZPIECZENIE PODROZY\b/.test(line));
    if (startIndex < 0) return "";
    const endIndex = normalizedLines.findIndex((line, index) => (
      index > startIndex && /\bSKLADKA LACZNA\b|\bTOTAL PREMIUM\b/.test(line)
    ));
    const sectionEnd = endIndex > startIndex ? endIndex : Math.min(lines.length, startIndex + 40);
    const definitions = [
      { label: "Koszty leczenia", pattern: /^KOSZTY LECZENIA\b/ },
      { label: "Assistance", pattern: /^ASSISTANCE\b/ },
      { label: "Pakiet narciarza/snowboardzisty", pattern: /^PAKIET KORZYSCI DLA NARCIARZA|^PAKIET NARCIARZA/ },
      { label: "Następstwa nieszczęśliwych wypadków", pattern: /^NASTEPSTWA NIESZCZESLIWYCH WYPADKOW\b/ },
      { label: "Odpowiedzialność cywilna w życiu prywatnym", pattern: /^ODPOWIEDZIALNOSC CYWILNA W ZYCIU PRYWATNYM\b/ },
      { label: "Bagaż podróżny", pattern: /^BAGAZ PODROZNY\b/ },
      { label: "Kontynuacja leczenia powypadkowego", pattern: /^KONTYNUACJA LECZENIA POWYPADKOWEGO\b/ },
    ];
    const risks = [];
    for (let index = startIndex + 1; index < sectionEnd; index += 1) {
      const definition = definitions.find(({ pattern }) => pattern.test(normalizedLines[index]));
      if (definition && !risks.includes(definition.label)) risks.push(definition.label);
    }
    return risks.join(" • ").slice(0, 400);
  }

  registry.register({
    id: "warta-podroz",
    insurer: "Warta",
    product: "Travel",
    detect: ({ detectionText }) => common.isWartaPolicy(detectionText)
      && /WNIOSEK-POLISA\s*\/\s*PROPOSAL-POLICY WARTA TRAVEL\s+NR/.test(detectionText),
    parse: (context) => common.parse(context, {
      registrationLabel: "Podróż",
      riskSummaryResolver: findTravelRiskSummary,
    }),
  });
})(globalThis);
