CSAT Score:${lastResults.metrics.csat}/10
Total Purchases:${lastResults.metrics.purchases}
Customer Tenure:${lastResults.metrics.tenureMonths} months
`;
lucide.createIcons({ nodes: [document.getElementById('pdf-content')] });
try {
await new Promise(resolve => setTimeout(resolve, 100)); // Allow icons to render
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('Customer_Referral_Prediction.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));
predictBtn.addEventListener('click', handlePrediction);
csatScoreInput.addEventListener('input', () => {
csatScoreVal.textContent = csatScoreInput.value;
});
// --- Initialization ---
const defaultDate = new Date();
defaultDate.setFullYear(defaultDate.getFullYear() - 2);
customerSinceInput.value = defaultDate.toISOString().split('T')[0];
switchTab(0);
updateNavButtons();
lucide.createIcons();
});
