// account.js document.addEventListener('DOMContentLoaded', () => { const toast = document.getElementById('account-toast'); function showToast(msg, isError = false) { toast.textContent = msg; toast.classList.toggle('account-toast--error', isError); toast.classList.add('account-toast--visible'); setTimeout(() => toast.classList.remove('account-toast--visible'), 3000); } async function patchJson(url, data) { const res = await fetch(url, { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data), }); const json = await res.json(); if (!res.ok) throw new Error(json.error ?? 'Fehler'); return json; } // ── Account-Formular ────────────────────────────────────────────────────── const btnAccountSave = document.getElementById('btn-account-save'); if (btnAccountSave) { btnAccountSave.addEventListener('click', async () => { try { await patchJson('/api/account', { name: document.getElementById('account-name').value.trim(), trackingInterval: parseInt(document.getElementById('account-interval').value, 10), }); showToast('Gespeichert.'); } catch (e) { showToast(e.message, true); } }); } // ── Besitzer des Accounts ───────────────────────────────────────────────── const superadminSelect = document.getElementById('superadmin-select'); if (superadminSelect && !superadminSelect.disabled) { superadminSelect.addEventListener('change', async () => { const selectedName = superadminSelect.options[superadminSelect.selectedIndex].text; if (!confirm(`${selectedName} zum neuen Kontoinhaber machen?`)) { // Auswahl zurücksetzen superadminSelect.value = superadminSelect.dataset.original; return; } try { await patchJson('/api/account/superadmin', { userId: parseInt(superadminSelect.value, 10), }); showToast('Kontoinhaber geändert. Seite wird neu geladen…'); setTimeout(() => window.location.reload(), 1500); } catch (e) { showToast(e.message, true); superadminSelect.value = superadminSelect.dataset.original; } }); // Original-Wert merken für Rollback superadminSelect.dataset.original = superadminSelect.value; } // ── Passwort-Toggle ─────────────────────────────────────────────────────── const btnPwToggle = document.getElementById('btn-pw-toggle'); const pwSection = document.getElementById('pw-section'); if (btnPwToggle && pwSection) { btnPwToggle.addEventListener('click', (e) => { e.preventDefault(); const open = !pwSection.hidden; pwSection.hidden = open; btnPwToggle.textContent = open ? 'ändern' : 'abbrechen'; }); } // ── Benutzer-Formular ───────────────────────────────────────────────────── const btnUserSave = document.getElementById('btn-user-save'); if (btnUserSave) { btnUserSave.addEventListener('click', async () => { const data = { firstName: document.getElementById('user-firstname').value.trim(), lastName: document.getElementById('user-lastname').value.trim(), email: document.getElementById('user-email').value.trim(), }; if (pwSection && !pwSection.hidden) { const pwNew = document.getElementById('user-pw-new').value; const pwRepeat = document.getElementById('user-pw-repeat').value; if (pwNew !== pwRepeat) { showToast('Die Passwörter stimmen nicht überein.', true); return; } data.currentPassword = document.getElementById('user-pw-current').value; data.newPassword = pwNew; } try { await patchJson('/api/account/user', data); showToast('Gespeichert.'); if (pwSection) { pwSection.hidden = true; document.getElementById('btn-pw-toggle').textContent = 'ändern'; ['user-pw-current', 'user-pw-new', 'user-pw-repeat'].forEach(id => { document.getElementById(id).value = ''; }); } } catch (e) { showToast(e.message, true); } }); } });