document.addEventListener('DOMContentLoaded', () => { const main = document.getElementById('main'); const syncStatus = document.getElementById('syncStatus'); const countBadge = document.getElementById('countBadge'); async function load() { try { const res = await chrome.runtime.sendMessage({ type: 'getReviewTasks' }); if (res.error) { syncStatus.textContent = ''; renderError(res.error); return; } const review = res.review || []; const total = res.total || 0; const autoArchiveCount = res.autoArchiveCount || 0; syncStatus.textContent = `${total} total tasks synced`; if (review.length === 0) { countBadge.style.display = 'none'; renderEmpty(); } else { countBadge.textContent = String(review.length); countBadge.style.display = 'inline-block'; renderStats(review, autoArchiveCount); } } catch (e) { syncStatus.textContent = ''; renderError(e.message); } } function renderEmpty() { main.innerHTML = `
No decayed tasks found. Great job keeping up!
Open Settings `; document.getElementById('syncBtn')?.addEventListener('click', doSync); } function renderError(msg) { main.innerHTML = `
${escapeHtml(msg)}
Open Settings `; document.getElementById('syncBtn')?.addEventListener('click', doSync); } function renderStats(review, autoArchiveCount) { const hot = review.filter((r) => r.score.score >= 70).length; const warm = review.filter((r) => r.score.score >= 40 && r.score.score < 70).length; const cold = review.filter((r) => r.score.score < 40).length; const oldest = review.reduce((a, b) => a.score.ageDays > b.score.ageDays ? a : b); main.innerHTML = `
Hot (≥70)${hot}
Warm (40-69)${warm}
Cold (<40)${cold}
Oldest task${Math.round(oldest.score.ageDays)} days
${autoArchiveCount > 0 ? `
Auto-archive ready${autoArchiveCount}
` : ''} Open Settings `; document.getElementById('reviewBtn')?.addEventListener('click', () => { chrome.runtime.sendMessage({ type: 'openReview' }); window.close(); }); document.getElementById('syncBtn')?.addEventListener('click', doSync); } async function doSync() { const btn = document.getElementById('syncBtn'); if (btn) btn.textContent = 'Syncing...'; try { const res = await chrome.runtime.sendMessage({ type: 'sync' }); if (res.error) { renderError(res.error); return; } await load(); } catch (e) { renderError(e.message); } } function escapeHtml(text) { const div = document.createElement('div'); div.textContent = text; return div.innerHTML; } load(); }); export {};