`;
}
function copySummary() {
const textToCopy = elements.output.innerText;
if (!textToCopy) return;
const tempTextArea = document.createElement('textarea');
tempTextArea.value = textToCopy;
document.body.appendChild(tempTextArea);
tempTextArea.select();
try {
document.execCommand('copy');
elements.copyBtn.textContent = 'Copied!';
setTimeout(() => { elements.copyBtn.textContent = 'Copy to Clipboard'; }, 2000);
} catch (err) {
displayError('Failed to copy text.');
}
document.body.removeChild(tempTextArea);
}
async function downloadPDF() {
const contentToPrint = document.getElementById('pdf-content');
if (!contentToPrint) return;
if (typeof window.jspdf === 'undefined' || typeof window.html2canvas === 'undefined') {
displayError("PDF generation library is not available.");
return;
}
try {
const { jsPDF } = window.jspdf;
const pdfCanvas = await html2canvas(contentToPrint, { scale: 2 });
const imgData = pdfCanvas.toDataURL('image/png');
const pdf = new jsPDF({ orientation: 'portrait', unit: 'pt', format: 'a4' });
const pdfWidth = pdf.internal.pageSize.getWidth();
const pdfHeight = (pdfCanvas.height * pdfWidth) / pdfCanvas.width;
pdf.addImage(imgData, 'PNG', 40, 40, pdfWidth - 80, pdfHeight - 80);
const fileName = `summary-of-${elements.title.value.trim().replace(/\s+/g, '-') || 'book'}.pdf`;
pdf.save(fileName);
} catch(err) {
console.error("PDF generation failed:", err);
displayError("An error occurred while creating the PDF.");
}
}
function displayError(message) {
elements.error.textContent = message;
elements.error.classList.remove('hidden');
elements.generateBtn.disabled = false;
elements.loading.classList.add('hidden');
}
function hideError() {
elements.error.classList.add('hidden');
}
});
