const Stats = (() => { async function init() { await loadStats(); } async function loadStats() { const content = document.getElementById('stats-content'); content.innerHTML = '
Loading stats...
'; try { const stats = await API.getStats(); renderStats(stats); } catch (e) { content.innerHTML = '
Error loading stats: ' + escHtml(e.message) + '
'; } } function renderStats(stats) { const content = document.getElementById('stats-content'); let html = ''; // Summary totals if (stats.total !== undefined || stats.totalDistance !== undefined) { const totalDist = stats.total?.distance || stats.totalDistance || 0; const totalTracks = stats.total?.count || stats.trackCount || 0; html += `

Total

Tracks
${totalTracks}
Distance
${formatDistance(totalDist)}
`; } // By year if (stats.byYear && stats.byYear.length > 0) { const maxDist = Math.max(...stats.byYear.map(s => s.distance || 0)); html += '

By Year

'; for (const s of stats.byYear) { const pct = maxDist > 0 ? ((s.distance || 0) / maxDist * 100) : 0; html += `
${s.year}
${formatDistance(s.distance)}
`; } html += '
'; } // By month (last 24 months) if (stats.byMonth && stats.byMonth.length > 0) { const recent = stats.byMonth.slice(-24); const maxDist = Math.max(...recent.map(s => s.distance || 0)); html += '

By Month (last 24)

'; for (const s of recent) { const pct = maxDist > 0 ? ((s.distance || 0) / maxDist * 100) : 0; const label = `${s.year}-${String(s.month).padStart(2, '0')}`; html += `
${label}
${formatDistance(s.distance)}
`; } html += '
'; } // By week (last 52 weeks) if (stats.byWeek && stats.byWeek.length > 0) { const recent = stats.byWeek.slice(-52); const maxDist = Math.max(...recent.map(s => s.distance || 0)); html += '

By Week (last 52)

'; for (const s of recent) { const pct = maxDist > 0 ? ((s.distance || 0) / maxDist * 100) : 0; const label = `${s.year}-W${String(s.week).padStart(2, '0')}`; html += `
${label}
${formatDistance(s.distance)}
`; } html += '
'; } if (!html) { html = '
No tracks yet. Upload some GPX files to see stats.
'; } content.innerHTML = html; } return { init, loadStats }; })();