(function registerWartaBusinessPolicyParser(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 findPremiumInRange(lines, normalizedLines, startIndex, endIndex) {
    for (let index = startIndex + 1; index < endIndex; index += 1) {
      
      if (!/^SKLADKA\b|^[0-9][0-9\s]*(?:[.,][0-9]{1,2})?\s*ZL SKLADKA$/.test(normalizedLines[index])) continue;
      const match = lines[index].match(
        /(?:SKŁADKA\s*)?([0-9][0-9\s\u00a0]*(?:[.,][0-9]{1,2})?)\s*zł(?:\s*SKŁADKA)?/i,
      );
      if (match) return `${helpers.normalizeLine(match[1])} zł`;
    }
    return "";
  }

  function findBusinessRiskSummary(allText) {
    const lines = String(allText ?? "").split(/\r?\n/).map(helpers.normalizeLine).filter(Boolean);
    const normalizedLines = lines.map(helpers.normalizeForDetection);
    const sectionDefinitions = [
      { label: "Mienie od wszystkich ryzyk + Assistance", pattern: /^UBEZPIECZENIE MIENIA OD WSZYSTKICH RYZYK Z USLUGA ASSISTANCE$/ },
      { label: "Kradzież z włamaniem i rabunek", pattern: /^UBEZPIECZENIE MIENIA OD KRADZIEZY Z WLAMANIEM I RABUNKU$/ },
      { label: "Elektronika od wszystkich ryzyk", pattern: /^UBEZPIECZENIE ELEKTRONIKI OD WSZYSTKICH RYZYK$/ },
      { label: "Przestój firmy", pattern: /^UBEZPIECZENIE OD PRZESTOJU FIRMY$/ },
      
      
      
      { label: "Rozszerzenia ochrony mienia", pattern: /^ROZSZERZENIE OCHRONY (?:UBEZPIECZENIA MIENIA|O UBEZPIECZENIE MIENIA)$/ },
      { label: "Mienie", pattern: /^UBEZPIECZENIE MIENIA$/ },
      { label: "OC działalności", pattern: /^UBEZPIECZENIE ODPOWIEDZIALNOSCI CYWILNEJ$/ },
    ];
    const starts = [];
    normalizedLines.forEach((line, index) => {
      const definition = sectionDefinitions.find(({ pattern }) => pattern.test(line));
      if (definition) starts.push({ ...definition, index });
    });
    const risks = [];
    starts.forEach((section, sectionIndex) => {
      const nextStart = starts[sectionIndex + 1]?.index ?? lines.findIndex((line, index) => (
        index > section.index && /^PLATNOSC\b/.test(normalizedLines[index])
      ));
      const endIndex = nextStart > section.index ? nextStart : lines.length;
      const premium = findPremiumInRange(lines, normalizedLines, section.index, endIndex);
      
      if (!premium && section.label === "Kradzież z włamaniem i rabunek") return;
      risks.push(premium ? `${section.label} ${premium}` : section.label);

      if (section.label === "OC działalności") {
        const premiumLines = [];
        for (let index = section.index + 1; index < endIndex; index += 1) {
          if (/^SKLADKA\b|^[0-9][0-9\s]*(?:[.,][0-9]{1,2})? ZL SKLADKA$/.test(normalizedLines[index])) premiumLines.push(index);
        }
        if (premiumLines.length > 1) {
          const extraPremium = findPremiumInRange(
            lines,
            normalizedLines,
            premiumLines[0],
            endIndex,
          );
          if (extraPremium) risks.push(`Rozszerzenia OC ${extraPremium}`);
        }
      }
    });
    return risks.join(" • ").slice(0, 400);
  }
  registry.register({
    id: "warta-firma",
    insurer: "Warta",
    product: "Ekstrabiznes Plus",
    detect: ({ detectionText }) => common.isWartaPolicy(detectionText)
      && /WNIOSEK-POLISA WARTA EKSTRABIZNES PLUS\s+NR/.test(detectionText),
    parse: (context) => common.parse(context, {
      registrationLabel: "Firma",
      riskSummaryResolver: findBusinessRiskSummary,
    }),
  });

  
  
  
  registry.register({
    id: "warta-smartbiznes",
    insurer: "Warta",
    product: "Smartbiznes",
    detect: ({ detectionText }) => common.isWartaPolicy(detectionText)
      && /WNIOSEK-POLISA SMARTBIZNES\s+NR/.test(detectionText),
    parse: (context) => common.parse(context, {
      registrationLabel: "Firma",
      riskSummaryResolver: findBusinessRiskSummary,
    }),
  });

  
  
  
  
})(globalThis);
