${resultsOutputDiv.innerHTML}
`;
// Temporarily hide the main tool container to avoid layout issues during PDF generation
peSimulatorContainer.style.display = 'none';
html2pdf().from(pdfContent).set({
margin: [20, 20, 20, 20], // Top, Left, Bottom, Right
filename: 'PE_Deal_Simulation_Report.pdf',
image: { type: 'jpeg', quality: 0.98 },
html2canvas: { scale: 2, logging: true, dpi: 192, letterRendering: true },
jsPDF: { unit: 'mm', format: 'a4', orientation: 'landscape' } // Landscape for better table fit
}).save().then(() => {
// Restore visibility of the main tool container after PDF generation is complete
peSimulatorContainer.style.display = 'flex';
pdfContent.remove(); // Clean up temporary element
}).catch(error => {
console.error("Error generating PDF:", error);
showCustomModal('PDF Generation Error', 'There was an issue generating the PDF. Please try again.');
peSimulatorContainer.style.display = 'flex';
pdfContent.remove();
});
}
// --- Event Listeners ---
tabButtons.forEach(button => {
button.addEventListener('click', handleTabButtonClick);
});
if (nextButton) {
nextButton.addEventListener('click', handleNextButtonClick);
}
if (prevButton) {
prevButton.addEventListener('click', handlePrevButtonClick);
}
if (downloadPdfButton) {
downloadPdfButton.addEventListener('click', downloadPDF);
}
// Slider value updates
if (revenueGrowthSlider) revenueGrowthSlider.addEventListener('input', () => updateSliderValue(revenueGrowthSlider, revenueGrowthValue, '%'));
if (ebitdaMarginSlider) ebitdaMarginSlider.addEventListener('input', () => updateSliderValue(ebitdaMarginSlider, ebitdaMarginValue, '%'));
if (capexPercentRevenueSlider) capexPercentRevenueSlider.addEventListener('input', () => updateSliderValue(capexPercentRevenueSlider, capexPercentRevenueValue, '%'));
if (workingCapitalPercentRevenueSlider) workingCapitalPercentRevenueSlider.addEventListener('input', () => updateSliderValue(workingCapitalPercentRevenueSlider, workingCapitalPercentRevenueValue, '%'));
if (projectionYearsSlider) projectionYearsSlider.addEventListener('input', () => updateSliderValue(projectionYearsSlider, projectionYearsValue, ''));
if (exitMultipleSlider) exitMultipleSlider.addEventListener('input', () => updateSliderValue(exitMultipleSlider, exitMultipleValue, 'x'));
if (holdingPeriodSlider) holdingPeriodSlider.addEventListener('input', () => updateSliderValue(holdingPeriodSlider, holdingPeriodValue, ''));
if (interestRateSlider) interestRateSlider.addEventListener('input', () => updateSliderValue(interestRateSlider, interestRateValue, '%'));
if (transactionFeesPercentSlider) transactionFeesPercentSlider.addEventListener('input', () => updateSliderValue(transactionFeesPercentSlider, transactionFeesPercentValue, '%'));
// Custom modal close button
if (modalCloseButton) {
modalCloseButton.addEventListener('click', hideCustomModal);
}
// Close modal if clicking outside (on overlay)
if (customModalOverlay) {
customModalOverlay.addEventListener('click', (e) => {
if (e.target === customModalOverlay) {
hideCustomModal();
}
});
}
// --- Initial Setup ---
showTab(0); // Show the first tab on load
});