`;
const ctx = document.getElementById('factors-chart').getContext('2d');
const chartData = {
labels: Object.keys(predictionResults.factors),
datasets: [{
label: 'Price Impact ($)',
data: Object.values(predictionResults.factors).map(v => Math.max(0,v)),
backgroundColor: ['#38bdf8', '#34d399', '#a78bfa', '#facc15'],
borderColor: '#475569',
borderWidth: 1,
}]
};
if (factorsChart) factorsChart.destroy();
factorsChart = new Chart(ctx, {
type: 'bar', data: chartData,
options: { indexAxis: 'y', responsive: true, plugins: { legend: { display: false } }, scales: { x: { ticks: { color: '#9ca3af' } }, y: { ticks: { color: '#9ca3af' } } } }
});
}
// --- PDF GENERATION ---
async function generatePdfReport() {
downloadPdfBtn.disabled = true;
downloadPdfBtn.textContent = 'Generating...';
const factorRows = Object.entries(predictionResults.factors)
.map(([key, value]) => `${key} $${value.toLocaleString(undefined, {maximumFractionDigits:0})} `).join('');
const reportHtml = `
`;
const pdfTemplate = document.getElementById('pdf-template');
pdfTemplate.innerHTML = reportHtml;
pdfTemplate.classList.remove('invisible');
new Chart(document.getElementById('pdf-factors-chart').getContext('2d'), {
type: 'bar', data: factorsChart.data,
options: { ...factorsChart.options, animation: { duration: 0 }, plugins: { legend: { display: false } } }
});
setTimeout(async () => {
try {
const { jsPDF } = window.jspdf;
const canvas = await html2canvas(pdfTemplate.querySelector('.pdf-page'), { scale: 2, backgroundColor: '#030712' });
const imgData = canvas.toDataURL('image/png');
const pdf = new jsPDF({ orientation: 'p', unit: 'pt', format: 'a4' });
const pdfWidth = pdf.internal.pageSize.getWidth(), pdfHeight = (canvas.height * pdfWidth) / canvas.width;
pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pdfHeight);
pdf.save('NFT_Valuation_Report.pdf');
} catch (e) { console.error('PDF Generation Error:', e); } finally {
downloadPdfBtn.disabled = false;
downloadPdfBtn.textContent = 'Download PDF Report';
pdfTemplate.classList.add('invisible');
pdfTemplate.innerHTML = '';
}
}, 500);
}
downloadPdfBtn.addEventListener('click', generatePdfReport);
// --- INITIALIZATION ---
switchTab(0);
});
NFT Valuation Report
Simulated Price Analysis for: ${nftData.collectionName}
PREDICTED PRICE RANGE
$${predictionResults.priceRange[0].toLocaleString(undefined,{maximumFractionDigits:0})} - $${predictionResults.priceRange[1].toLocaleString(undefined,{maximumFractionDigits:0})}
INPUT DATA
| Rarity Score | ${nftData.rarityScore}/100 |
| Creator Reputation | ${nftData.creatorRep} |
| 7d Avg Price | $${nftData.avgPrice.toLocaleString()} |
| 7d Volume | ${nftData.tradingVolume.toLocaleString()} |
CONFIDENCE
${predictionResults.confidence}%
FACTOR ANALYSIS
