`;
resultsPlaceholder.classList.add('hidden');
resultsContent.classList.remove('hidden');
}
// --- PDF GENERATION ---
async function downloadPDF() {
if (typeof window.jspdf === 'undefined' || typeof window.html2canvas === 'undefined') {
showAlert("PDF Error", "A required library for PDF generation could not be loaded. Please check your internet connection.");
return;
}
pdfLoader.classList.remove('hidden');
pdfDownloadBtn.classList.add('hidden');
try {
const { jsPDF } = window.jspdf;
const pdf = new jsPDF({ orientation: 'p', unit: 'mm', format: 'a4' });
// Add Title
pdf.setFontSize(18);
pdf.setFont('helvetica', 'bold');
pdf.text('Stellar Distance Calculation Report', 105, 15, { align: 'center' });
// Add Input Value
pdf.setFontSize(12);
pdf.setFont('helvetica', 'normal');
pdf.text(`Input Parallax Angle (p): ${parallaxInput.value} arcseconds`, 15, 30);
// Add Results
const resultsCanvas = await html2canvas(document.getElementById('distance-outputs'));
const resultsImgData = resultsCanvas.toDataURL('image/png');
pdf.addImage(resultsImgData, 'PNG', 15, 35, 180, 0);
// Add Diagram
const diagramCanvas = await html2canvas(document.querySelector('.parallax-diagram'));
const diagramImgData = diagramCanvas.toDataURL('image/png');
const diagramStartY = 35 + (180 * (resultsCanvas.height / resultsCanvas.width)) + 10;
pdf.addImage(diagramImgData, 'PNG', 105, diagramStartY, 90, 0, undefined, 'FAST');
// Add Explanation
pdf.setFontSize(10);
pdf.text('d (parsecs) = 1 / p (arcseconds)', 15, diagramStartY + 5);
pdf.save('star-distance-calculation.pdf');
} catch (error) {
console.error("PDF Generation Error:", error);
showAlert("PDF Error", "An unknown error occurred while generating the PDF. Please try again.");
} finally {
pdfLoader.classList.add('hidden');
pdfDownloadBtn.classList.remove('hidden');
}
}
// --- EVENT LISTENERS ---
calculateBtn.addEventListener('click', calculateDistance);
pdfDownloadBtn.addEventListener('click', downloadPDF);
// --- INITIALIZATION ---
drawDiagram();
window.addEventListener('resize', drawDiagram); // Redraw if window size changes
});
