Call to Action
${copy.callToAction}
`;
fullCopyText = Object.entries(copy).map(([key, value]) => `${key.toUpperCase()}\n${value}`).join('\n\n');
elements.resultsPlaceholder.classList.add('hidden');
elements.resultsContainer.classList.remove('hidden');
}
function setLoadingState(isLoading) {
elements.generateBtn.disabled = isLoading;
if (isLoading) {
elements.generateBtn.innerHTML = `
Writing...`;
elements.resultsContainer.classList.add('hidden');
elements.resultsPlaceholder.classList.remove('hidden');
elements.resultsPlaceholder.innerHTML = `
Writing Your Sales Page...
`;
} else {
elements.generateBtn.innerHTML = `
Generate Copy`;
}
}
function displayError(message) {
elements.resultsPlaceholder.innerHTML = `
Generation Failed
${message}
`;
elements.resultsPlaceholder.classList.remove('hidden');
elements.resultsContainer.classList.add('hidden');
}
function handleCopy() {
if (!fullCopyText) return;
navigator.clipboard.writeText(fullCopyText).then(() => {
const originalText = elements.copyBtn.innerHTML;
elements.copyBtn.innerHTML = `
Copied!`;
setTimeout(() => { elements.copyBtn.innerHTML = originalText; }, 2000);
}).catch(err => console.error('Failed to copy: ', err));
}
// --- PDF Generation ---
function generatePdf() {
if (!generationResult) return;
const { jsPDF } = window.jspdf;
const doc = new jsPDF();
doc.setFont('helvetica', 'bold');
doc.setFontSize(18);
doc.text("Sales Page Copy Report", doc.internal.pageSize.getWidth() / 2, 20, { align: 'center' });
doc.setFontSize(11);
doc.setTextColor(100);
doc.text(`Generated on: ${new Date().toLocaleDateString('en-US')}`, 14, 30);
const { details, copy } = generationResult;
const criteriaBody = [
['Product Name', details.name],
['Target Audience', details.audience],
['Key Benefits', details.benefits],
['Call to Action', details.cta],
['Tone', details.tone],
];
doc.autoTable({
startY: 35,
head: [['Input Criteria', 'Value']],
body: criteriaBody, theme: 'striped', headStyles: { fillColor: '#dc2626' }
});
let lastY = doc.autoTable.previous.finalY + 10;
Object.entries(copy).forEach(([key, value]) => {
doc.setFont('helvetica', 'bold');
doc.setFontSize(12);
doc.text(key.replace(/([A-Z])/g, ' $1').trim().toUpperCase(), 14, lastY);
doc.setFont('helvetica', 'normal');
doc.setFontSize(10);
const lines = doc.splitTextToSize(value, doc.internal.pageSize.getWidth() - 28);
doc.text(lines, 14, lastY + 7);
lastY += 7 + (lines.length * 5) + 5; // Add padding
});
doc.save(`sales-copy-report.pdf`);
}
initialize();
});