Personal Profile Match
${assessmentData.profileMatch}
`;
};
const downloadPDF = () => {
if (!assessmentData) {
alert('Please run an assessment first on the "Risk Dashboard" tab.');
return;
}
const { jsPDF } = window.jspdf;
const doc = new jsPDF({ orientation: 'p', unit: 'pt', format: 'a4' });
const theme = document.querySelector('input[name="theme"]:checked').value;
const page = { width: doc.internal.pageSize.getWidth(), height: doc.internal.pageSize.getHeight() };
const margin = 50;
let y = 0;
const colors = theme === 'formal'
? { bg: '#111827', text: '#FFFFFF', primary: '#1f2937', secondary: '#4b5563', accent: '#374151' }
: { bg: '#1e40af', text: '#FFFFFF', primary: '#111827', secondary: '#374151', accent: '#2563eb' };
// --- Header ---
doc.setFillColor(colors.bg);
doc.rect(0, 0, page.width, 90, 'F');
doc.setFont('helvetica', 'bold');
doc.setFontSize(22);
doc.setTextColor(colors.text);
doc.text('Blockchain Investment Risk Report', margin, 55);
doc.setFontSize(12);
doc.text(`Project: ${assessmentData.inputs.projectName}`, margin, 75);
y = 130;
// --- Overall Score ---
doc.setFont('helvetica', 'normal');
doc.setFontSize(12);
doc.setTextColor(colors.secondary);
doc.text('Overall Risk Score', page.width / 2, y, { align: 'center' });
y += 45;
doc.setFont('helvetica', 'bold');
doc.setFontSize(48);
doc.setTextColor(assessmentData.riskHexColor);
doc.text(`${assessmentData.finalScore}/100`, page.width / 2, y, { align: 'center' });
y += 25;
doc.setFontSize(18);
doc.text(assessmentData.riskLabel, page.width / 2, y, { align: 'center' });
y += 40;
// --- Section Helper ---
const addSection = (title, textContent) => {
const textLines = doc.splitTextToSize(textContent, page.width - margin * 2);
if (y + textLines.length * 12 + 40 > page.height - margin) {
doc.addPage();
y = margin;
}
doc.setFont('helvetica', 'bold');
doc.setFontSize(14);
doc.setTextColor(colors.primary);
doc.text(title, margin, y);
y += 10;
doc.setDrawColor(colors.accent);
doc.setLineWidth(1.5);
doc.line(margin, y, page.width - margin, y);
y += 20;
doc.setFont('helvetica', 'normal');
doc.setFontSize(10);
doc.setTextColor(colors.secondary);
doc.text(textLines, margin, y);
y += textLines.length * 12 + 20;
};
addSection('Assessment Summary', assessmentData.riskAdvice);
addSection('Personal Profile Match', `Finding: ${assessmentData.profileMatch}. ${assessmentData.profileAdvice}`);
// --- Chart ---
if (y > page.height - 250) {
doc.addPage(); y = margin;
}
const chartImage = riskChart.toBase64Image();
doc.addImage(chartImage, 'PNG', (page.width / 2) - 150, y, 300, 300);
y += 320;
doc.save(`risk-report-${assessmentData.inputs.projectName.replace(/\s+/g, '-')}.pdf`);
};
// --- Event Listeners ---
tabs.forEach((tab, index) => tab.addEventListener('click', () => showTab(index)));
prevBtn.addEventListener('click', () => navigateTab(-1));
nextBtn.addEventListener('click', () => navigateTab(1));
assessBtn.addEventListener('click', runAssessment);
downloadPdfBtn.addEventListener('click', downloadPDF);
// --- Initialization ---
showTab(0);
});