`).join('') : '
`;
document.getElementById('download-pdf-btn').addEventListener('click', handlePdfDownload);
lucide.createIcons();
}
async function handlePdfDownload() {
if (!lastResults) return;
const { jsPDF } = window.jspdf;
const riskColorClassesPDF = {
'Low': 'bg-green-100 border-green-500 text-green-900',
'Medium': 'bg-amber-100 border-amber-500 text-amber-900',
'High': 'bg-red-100 border-red-500 text-red-900'
};
// Populate PDF container
document.getElementById('pdf-report-date').textContent = new Date().toLocaleDateString();
const riskSummaryEl = document.getElementById('pdf-risk-summary');
riskSummaryEl.className = `flex items-center space-x-4 p-4 rounded-md border-l-8 ${riskColorClassesPDF[lastResults.riskLevel]}`;
riskSummaryEl.innerHTML = `
`;
let tableHtml = `
`;
document.getElementById('pdf-metrics-table').innerHTML = tableHtml;
document.getElementById('pdf-recommendation').textContent = lastResults.recommendation;
// Must create icons for PDF content before rendering
lucide.createIcons({
nodes: [document.querySelector('#pdf-risk-summary')]
});
try {
// Timeout to allow icons to render
await new Promise(resolve => setTimeout(resolve, 100));
const canvas = await html2canvas(document.getElementById('pdf-content'), { scale: 2 });
const imgData = canvas.toDataURL('image/png');
const pdf = new jsPDF({ orientation: 'portrait', unit: 'pt', format: 'a4' });
const pdfWidth = pdf.internal.pageSize.getWidth();
const imgProps = pdf.getImageProperties(imgData);
const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width;
pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pdfHeight);
pdf.save('Refund_Abuse_Report.pdf');
} catch (e) {
console.error("PDF generation failed:", e);
alert("An error occurred generating the PDF.");
}
}
// --- Event Listeners ---
tabs.forEach((tab, index) => tab.btn.addEventListener('click', () => switchTab(index)));
prevBtn.addEventListener('click', () => switchTab(currentTab - 1));
nextBtn.addEventListener('click', () => switchTab(currentTab + 1));
analyzeBtn.addEventListener('click', handleAnalysis);
// --- Initialization ---
orderHistoryInput.value = sampleData;
switchTab(0);
updateNavButtons();
lucide.createIcons();
});
No abuse thresholds were triggered.
'; analysisResults.innerHTML = `Risk Analysis Report
Overall Risk Level
${results.riskLevel}
${flagsHtml}
Recommendation
${results.recommendation}
${lastResults.riskLevel} Risk
Abuse Score: ${lastResults.riskScore}
| Metric | Calculated Value | Threshold | Flagged |
|---|---|---|---|
| ${f.metric} | ${f.value} | ${f.threshold} | Yes |
| No flags raised. | |||
