export const FORMAT_LABEL = { bo1: 'Best of 1', bo3: 'Best of 3', bo5: 'Best of 5' }; export const ROLE_LABEL = { organizer: 'Organisator', captain: 'Captain', player: 'Spieler', spectator: 'Zuschauer', public: 'Gast', }; /** Serverstatus in Worte fassen. Simulierte Server werden nie als laufend bezeichnet. */ export function serverLabel(server) { if (!server) return { text: 'Kein Server', tone: 'muted' }; const sim = server.simulated; switch (server.status) { case 'starting': return { text: sim ? 'Demo: Start wird simuliert' : 'Server startet', tone: 'pending' }; case 'ready': return { text: sim ? 'Demo: simuliert bereit' : 'Server bereit', tone: sim ? 'demo' : 'ok' }; case 'configuring': return { text: sim ? 'Demo: Konfiguration simuliert' : 'Server wird konfiguriert', tone: 'pending' }; case 'configured': return { text: sim ? 'Demo: simuliert konfiguriert' : 'Server läuft', tone: sim ? 'demo' : 'ok' }; case 'start_failed': return { text: 'Serverstart fehlgeschlagen', tone: 'error' }; case 'config_failed': return { text: 'Konfiguration fehlgeschlagen', tone: 'error' }; case 'failed': return { text: 'Server ausgefallen', tone: 'error' }; case 'stopped': return { text: 'Server gestoppt', tone: 'muted' }; default: return { text: server.status, tone: 'muted' }; } } export const STEP_VERB = { ban: 'bannt eine Map', pick: 'wählt eine Map', side: 'wählt die Startseite', decider: 'Entscheidungsmap' }; export function timeAgo(ts) { const s = Math.round((Date.now() - ts) / 1000); if (s < 60) return 'gerade eben'; const m = Math.round(s / 60); if (m < 60) return `vor ${m} Min.`; const h = Math.round(m / 60); if (h < 24) return `vor ${h} Std.`; return new Date(ts).toLocaleDateString('de-DE'); } export function clock(ts) { return new Date(ts).toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit', second: '2-digit' }); }