import { $, api, esc, showError, renderHeader, renderFooter } from './common.js';
renderHeader('statistik');
renderFooter();
let stats = [];
let canEdit = false; // angemeldet und laufendes Jahr
function detail(s) {
if (!s.manual) return '';
const sign = s.manual > 0 ? '+' : '−';
return `${s.calendar} aus Kalender ${sign} ${Math.abs(s.manual)} manuell`;
}
function render() {
$('#stats-empty').hidden = stats.length > 0;
$('#stats-edit-hint').hidden = !canEdit;
// Gleiche Anzahl → gleicher Platz
const rank = (s) => 1 + stats.filter((x) => x.total > s.total).length;
const max = Math.max(1, ...stats.map((s) => s.total));
$('#stats-list').innerHTML = stats.map((s) => `
${rank(s)}.
${esc(s.name)} ${detail(s)}
${canEdit ? `
` : ''}
${s.total}
${canEdit ? `
` : ''}
`).join('');
}
$('#stats-list').addEventListener('click', async (e) => {
const { step, id } = e.target.closest('[data-step]')?.dataset ?? {};
if (!step) return;
const s = stats.find((x) => x.id === id);
try {
const { manual } = await api('PUT', `/members/${id}/plays-manual`, { manual: Math.max(s.manual, -s.calendar) + Number(step) });
s.manual = manual;
s.total = Math.max(0, s.calendar + manual);
stats.sort((a, b) => b.total - a.total || a.name.localeCompare(b.name, 'de'));
render();
} catch (err) {
showError(err);
}
});
let loggedIn = false;
async function load(year) {
const data = await api('GET', `/stats${year ? `?year=${year}` : ''}`);
stats = data.entries;
canEdit = loggedIn && data.live;
$('#stats-year').innerHTML = data.years
.map((y, i) => ``).join('');
$('#stats-info').textContent = data.live
? `Laufendes Jahr: Spiel-Events seit dem 1. Januar ${data.year}, bei denen jemand zugesagt hat.`
: `Endstand ${data.year}, gespeichert am ${new Date(data.savedAt).toLocaleDateString('de-DE')}.`;
render();
}
$('#stats-year').addEventListener('change', (e) => load(e.target.value).catch(showError));
api('GET', '/me')
.then(({ user }) => { loggedIn = !!user; return load(); })
.catch(showError);