${type}: ${summary[type]}
`;
}
}
}
// --- PDF Report ---
function pot_downloadReport() {
if (!tpc_jsPDF_loaded_POT || !tpc_autoTable_loaded_POT) { alert("POT Error: PDF libraries not loaded."); return; }
const doc = new TPC_jsPDF_POT();
const primaryColor = getComputedStyle(document.documentElement).getPropertyValue('--primary-color').trim();
const darkColor = getComputedStyle(document.documentElement).getPropertyValue('--dark-color').trim();
let finalY = 15;
const todayStr = new Date().toLocaleDateString();
doc.setFontSize(18); doc.setTextColor(primaryColor);
doc.text("Productivity Optimization Report", doc.internal.pageSize.getWidth() / 2, finalY, { align: 'center' });
finalY += 8; doc.setFontSize(10); doc.setTextColor(darkColor);
doc.text(`Report Date: ${todayStr}`, doc.internal.pageSize.getWidth() / 2, finalY, { align: 'center'});
finalY += 12;
// Pomodoro Log
doc.setFontSize(14); doc.setTextColor(primaryColor);
doc.text("Pomodoro Session Log", 14, finalY); finalY += 7;
doc.setFontSize(10); doc.setTextColor(darkColor);
doc.text(`Work: ${document.getElementById('pot-work-duration').value}m, Short Break: ${document.getElementById('pot-short-break').value}m, Long Break: ${document.getElementById('pot-long-break').value}m (after ${document.getElementById('pot-cycles').value} cycles)`, 14, finalY); finalY +=5;
doc.text(`Total Pomodoros Completed: ${pot_pomodorosCompleted}`, 14, finalY); finalY += 7;
if(pot_pomodoroLog.length > 0) {
doc.autoTable({
startY: finalY, head: [['Type', 'Task/Activity', 'Duration']],
body: pot_pomodoroLog.map(p => [p.type, p.task, p.duration]),
theme: 'grid', headStyles: { fillColor: primaryColor, textColor: '#ffffff' }, styles: { fontSize: 9 }
});
finalY = doc.lastAutoTable.finalY + 10;
} else { doc.text("No Pomodoros logged in this session.", 14, finalY); finalY += 7; }
// Daily Goals & Priority
doc.setFontSize(14); doc.setTextColor(primaryColor);
doc.text("Daily Goals & Priority", 14, finalY); finalY += 7;
doc.setFontSize(10); doc.setTextColor(darkColor);
const mitTask = document.getElementById('pot-mit-task').value.trim();
doc.text(`Today's Most Important Task (MIT): ${mitTask || 'Not set'}`, 14, finalY, {maxWidth: doc.internal.pageSize.getWidth() - 28});
finalY += (mitTask ? Math.ceil(doc.getTextDimensions(mitTask).h / (doc.internal.pageSize.getWidth() - 28)) * 5 : 5) + 5 ;
if(pot_sortedPriorityTasksData.length > 0) {
doc.text("Prioritized Task List:", 14, finalY); finalY += 5;
doc.autoTable({
startY: finalY, head: [['Task Name', 'Importance', 'Urgency', 'Quadrant']],
body: pot_sortedPriorityTasksData.map(t => [t.name, t.importance, t.urgency, t.quadrant]),
theme: 'grid', headStyles: { fillColor: primaryColor, textColor: '#ffffff' }, styles: { fontSize: 9 }
});
finalY = doc.lastAutoTable.finalY + 10;
} else { doc.text("No tasks processed by priority sorter.", 14, finalY); finalY += 7; }
// Distraction Log
doc.setFontSize(14); doc.setTextColor(primaryColor);
doc.text("Distraction Log", 14, finalY); finalY += 7;
if(pot_distractionLog.length > 0) {
doc.autoTable({
startY: finalY, head: [['Time', 'Type', 'Note']],
body: pot_distractionLog.map(d => [d.timestamp.toLocaleTimeString(), d.type, d.note]),
theme: 'grid', headStyles: { fillColor: primaryColor, textColor: '#ffffff' }, styles: { fontSize: 9 }
});
finalY = doc.lastAutoTable.finalY; // For summary right after table
// Distraction Summary for PDF
const summary = {}; pot_distractionLog.forEach(d => { summary[d.type] = (summary[d.type] || 0) + 1; });
let summaryText = "Summary: ";
for (const type in summary) { summaryText += `${type}: ${summary[type]}; `; }
finalY += 7;
doc.setFontSize(9); doc.setTextColor(darkColor);
doc.text(summaryText, 14, finalY, {maxWidth: doc.internal.pageSize.getWidth() - 28});
} else { doc.setFontSize(10); doc.setTextColor(darkColor); doc.text("No distractions logged in this session.", 14, finalY); }
doc.save(`Productivity_Report_${new Date().toISOString().slice(0,10)}.pdf`);
}