`;
}
if (inputs.overview.spacStatus === 'post_merger' && inputs.postmerger) {
inputsHtml += `
`;
}
inputsHtml += ``;
let analysisSummaryHtml = "";
if (analysis.strengths.length > 0) {
analysisSummaryHtml += `
Post-Merger Overview:
Current Share Price: ${spa_formatCurrency(inputs.postmerger.currentSharePrice)}
Performance Notes: ${inputs.postmerger.performanceNotes || 'N/A'}
Acknowledged Risk Factors:
- `;
if(inputs.risks.dilution) inputsHtml += `
- Potential for Dilution `; if(inputs.risks.sponsorIncentives) inputsHtml += `
- Sponsor Misaligned Incentives `; if(inputs.risks.targetQuality) inputsHtml += `
- Target Company Quality/Viability Concerns `; if(inputs.risks.valuation) inputsHtml += `
- Valuation Risk for Target `; if(inputs.risks.marketSentiment) inputsHtml += `
- Market Sentiment Volatility `; if(inputs.risks.lockupExpirations) inputsHtml += `
- Lock-up Expiration Selling Pressure `; if(inputs.risks.execution) inputsHtml += `
- Post-Merger Execution Risk `; if(inputs.risks.liquidity) inputsHtml += `
- Liquidity Risk `; if (Object.values(inputs.risks).every(v => !v)) inputsHtml += '
- No specific risks from checklist acknowledged. '; inputsHtml += `
Potential Strengths Identified:
- ${analysis.strengths.map(s => `
- ${s.replace(/`).join('')}
Potential Concerns / Red Flags:
- ${analysis.concerns.map(c => `
- ${c.replace(/`).join('')}
Neutral Points / For Consideration:
- ${analysis.neutrals.map(n => `
- ${n.replace(/`).join('')}
${analysis.overall}
`;
const disclaimer_pdf = `This analysis is based on user-provided assessments and general SPAC characteristics. It is NOT exhaustive financial advice. SPACs are complex and high-risk. Always conduct thorough independent due diligence and consult qualified professionals.`;
pdfContentEl.innerHTML = `
SPAC Investment Analysis Report
I. Input Summary
${inputsHtml}
II. Key Considerations & Analysis
${analysisSummaryHtml}
Disclaimer: ${disclaimer_pdf}
`;
document.body.appendChild(pdfContentEl);
html2canvas(pdfContentEl, { scale: 2, useCORS: true, logging:true, windowWidth: pdfContentEl.scrollWidth, windowHeight: pdfContentEl.scrollHeight }).then(canvas => {
const imgData = canvas.toDataURL('image/png');
const pdfWidth = pdf.internal.pageSize.getWidth();
const pdfHeight = pdf.internal.pageSize.getHeight();
let numPages = Math.ceil(canvas.height / ( (pdfHeight - 40) * (canvas.width / (pdfWidth - 40)) ) );
let pageCanvasHeight = (pdfHeight - 40) * (canvas.width / (pdfWidth - 40));
for (let i = 0; i < numPages; i++) {
if (i > 0) pdf.addPage();
let sourceY = i * pageCanvasHeight;
let sourceHeight = Math.min(pageCanvasHeight, canvas.height - sourceY);
const tempCanvas = document.createElement('canvas');
tempCanvas.width = canvas.width;
tempCanvas.height = sourceHeight;
const ctx = tempCanvas.getContext('2d');
ctx.drawImage(canvas, 0, sourceY, canvas.width, sourceHeight, 0, 0, canvas.width, sourceHeight);
const pageImgData = tempCanvas.toDataURL('image/png');
const pageImgHeight = (sourceHeight * (pdfWidth - 40)) / canvas.width;
pdf.addImage(pageImgData, 'PNG', 20, 20, pdfWidth - 40, pageImgHeight, undefined, 'FAST');
}
pdf.save(`${(inputs.overview.spacName || "SPAC").replace(/[^a-z0-9]/gi, '_')}_Analysis.pdf`);
if(document.body.contains(pdfContentEl)) document.body.removeChild(pdfContentEl);
}).catch(err => {
console.error("SPAC PDF Error:", err); alert("Error generating SPAC Analysis PDF. See console.");
if(document.body.contains(pdfContentEl)) document.body.removeChild(pdfContentEl);
});
}
document.addEventListener('DOMContentLoaded', function() {
spa_handleStatusChange(); // Initialize conditional field visibility based on default SPAC status
spa_openTab({}, 'spa_tab_overview');
if (!document.getElementById('spa_spacName')) {
console.error("Critical input 'spa_spacName' not found.");
}
});
