import type { ComparePagePair, ComparePageResult } from '../types.ts'; function escapeHtml(text: string) { return text .replace(/&/g, '&') .replace(//g, '>') .replace(/"/g, '"') .replace(/'/g, '''); } export function buildCompareReport( fileName1: string, fileName2: string, pairs: ComparePagePair[], results: ComparePageResult[] ) { const totals = results.reduce( (summary, result) => { summary.added += result.summary.added; summary.removed += result.summary.removed; summary.modified += result.summary.modified; return summary; }, { added: 0, removed: 0, modified: 0 } ); const rows = results .map((result, index) => { const pair = pairs[index]; const changes = result.changes .map( (change) => `
  • ${escapeHtml(change.type)}: ${escapeHtml(change.description)}
  • ` ) .join(''); return `

    Comparison ${pair?.pairIndex || index + 1}

    PDF 1 page: ${pair?.leftPageNumber ?? 'none'} | PDF 2 page: ${pair?.rightPageNumber ?? 'none'} | Confidence: ${((pair?.confidence || 0) * 100).toFixed(0)}%

    Status: ${escapeHtml(result.status)}${result.usedOcr ? ' | OCR used' : ''}

    Added: ${result.summary.added} | Removed: ${result.summary.removed} | Modified: ${result.summary.modified}

    `; }) .join(''); return ` Compare report

    PDF Compare Report

    PDF 1: ${escapeHtml(fileName1)} | PDF 2: ${escapeHtml(fileName2)}

    Added
    ${totals.added}
    Removed
    ${totals.removed}
    Modified
    ${totals.modified}
    ${rows} `; }