import { bindLoginForm, isAuthenticated, logout, createTournament, addParticipant, scoreMatch, listTournaments, listMatches } from '/assets/api.js?v=10'; const toast = document.getElementById('toast'); const adminSection = document.getElementById('adminSection'); const loginSection = document.getElementById('loginSection'); function showToast(msg, ok=true){ toast.textContent = msg; toast.style.borderColor = ok ? 'rgba(143,237,255,.45)' : 'rgba(255,120,120,.45)'; toast.classList.add('show'); setTimeout(()=>toast.classList.remove('show'), 2200); } function toggleAdminUI(){ const logged = isAuthenticated(); adminSection.classList.toggle('hide', !logged); loginSection.classList.toggle('hide', logged); } function disable(btn, spin, yes){ btn.disabled = !!yes; spin.classList.toggle('hide', !yes); } async function renderTournaments(){ const wrap = document.getElementById('listTournaments'); const p_tid = document.getElementById('p_tid'); const s_tid = document.getElementById('s_tid'); try{ const ts = await listTournaments(); wrap.innerHTML = ts.map(t => `
#${t.id} — ${t.name} (${[t.location||'—', t.start_date].filter(Boolean).join(' • ')})
`).join('') || '
Aucun tournoi.
'; const opts = [''].concat( ts.map(t => ``) ).join(''); p_tid.innerHTML = opts; s_tid.innerHTML = opts; }catch(e){ wrap.innerHTML = `
Erreur chargement: ${e.message}
`; } } async function renderMatchesForSelectedTournament(){ const tid = Number(document.getElementById('s_tid').value || '0'); const s_mid = document.getElementById('s_mid'); if(!tid){ s_mid.innerHTML = ''; return; } try{ const ms = await listMatches(tid); s_mid.innerHTML = [''].concat( ms.map(m => ``) ).join(''); }catch(e){ s_mid.innerHTML = ''; } } function bindAuth(){ bindLoginForm({}); const logoutBtn = document.getElementById('logoutBtn'); logoutBtn?.addEventListener('click', ()=>{ logout(); toggleAdminUI(); showToast('Déconnecté.'); }); } function bindAdminActions(){ document.getElementById('createTournamentBtn')?.addEventListener('click', async (e)=>{ const btn = e.currentTarget; const spin = document.getElementById('createTournamentSpin'); const err = document.getElementById('createTournamentErr'); err.textContent=''; const name = document.getElementById('t_name').value.trim(); if(!name){ err.textContent='Le nom est requis.'; return; } const payload = { name, location: document.getElementById('t_location').value.trim(), start_date: document.getElementById('t_start').value || null, end_date: document.getElementById('t_end').value || null }; try{ disable(btn, spin, true); await createTournament(payload); showToast('Tournoi créé ✔'); document.getElementById('t_name').value=''; document.getElementById('t_location').value=''; document.getElementById('t_start').value=''; document.getElementById('t_end').value=''; renderTournaments(); }catch(e){ err.textContent = e?.payload?.error || e.message; showToast('Erreur création tournoi', false); }finally{ disable(btn, spin, false); } }); document.getElementById('addParticipantBtn')?.addEventListener('click', async (e)=>{ const btn = e.currentTarget; const spin = document.getElementById('addParticipantSpin'); const err = document.getElementById('addParticipantErr'); err.textContent=''; const tid = Number(document.getElementById('p_tid').value || '0'); const full_name = document.getElementById('p_fullname').value.trim(); if(!tid){ err.textContent='Choisis un tournoi.'; return; } if(!full_name){ err.textContent='Nom du joueur requis.'; return; } try{ disable(btn, spin, true); await addParticipant(tid, { full_name }); showToast('Joueur ajouté ✔'); document.getElementById('p_fullname').value=''; }catch(e){ err.textContent = e?.payload?.error || e.message; showToast('Erreur ajout joueur', false); }finally{ disable(btn, spin, false); } }); document.getElementById('s_tid')?.addEventListener('change', renderMatchesForSelectedTournament); document.getElementById('scoreBtn')?.addEventListener('click', async (e)=>{ const btn = e.currentTarget; const spin = document.getElementById('scoreSpin'); const err = document.getElementById('scoreErr'); err.textContent=''; const mid = Number(document.getElementById('s_mid').value || '0'); if(!mid){ err.textContent='Choisis un match.'; return; } const payload = { score_a: Number(document.getElementById('m_a').value||'0'), score_b: Number(document.getElementById('m_b').value||'0'), done: document.getElementById('m_done').checked }; try{ disable(btn, spin, true); await scoreMatch(mid, payload); showToast('Score enregistré ✔'); document.getElementById('m_a').value=''; document.getElementById('m_b').value=''; document.getElementById('m_done').checked=false; }catch(e){ err.textContent = e?.payload?.error || e.message; showToast('Erreur scoring', false); }finally{ disable(btn, spin, false); } }); document.getElementById('refreshTournaments')?.addEventListener('click', renderTournaments); } function init(){ toggleAdminUI(); bindAuth(); bindAdminActions(); if(isAuthenticated()) renderTournaments(); } document.addEventListener('DOMContentLoaded', init);