`;
elements.dashboardPlaceholder.classList.remove('hidden');
elements.resultsContainer.classList.add('hidden');
elements.metrics.classList.add('hidden');
}
// --- PDF Generation ---
function generatePdf() {
if (generatedPosts.length === 0) return;
const { jsPDF } = window.jspdf;
const doc = new jsPDF();
const criteria = getCriteria();
doc.setFont('helvetica', 'bold');
doc.setFontSize(18);
doc.text('Social Media Monitoring Report', doc.internal.pageSize.getWidth() / 2, 20, { align: 'center' });
doc.setFontSize(11);
doc.setTextColor(100);
doc.text(`Report Date: ${new Date().toLocaleDateString('en-US')}`, 14, 30);
// Criteria Table
doc.autoTable({
startY: 35,
head: [['Monitoring Criteria', 'Details']],
body: [
['Keywords', criteria.keywords],
['Platforms', criteria.platforms.join(', ')],
['Date Range', `${criteria.startDate} to ${criteria.endDate}`],
],
theme: 'striped',
headStyles: { fillColor: '#4338ca' },
});
// Metrics Table
const metricsBody = [
['Total Mentions', elements.totalMentions.textContent],
['Positive Sentiment', elements.positiveCount.textContent],
['Negative Sentiment', elements.negativeCount.textContent],
['Neutral Sentiment', elements.neutralCount.textContent],
];
doc.autoTable({
startY: doc.autoTable.previous.finalY + 10,
head: [['Metric', 'Value']],
body: metricsBody,
theme: 'striped',
headStyles: { fillColor: '#0d9488' },
});
// Posts Table
const postsBody = generatedPosts.map(p => [
p.platform,
p.username,
p.content.substring(0, 50) + (p.content.length > 50 ? '...' : ''),
p.sentiment,
`${p.likes} / ${p.shares}`
]);
doc.autoTable({
startY: doc.autoTable.previous.finalY + 10,
head: [['Platform', 'Username', 'Content Snippet', 'Sentiment', 'Likes/Shares']],
body: postsBody,
theme: 'grid',
});
doc.save('social-media-report.pdf');
}
initialize();
});
