// ── Profile Page ── registerPage('profile', { async init() { var profile = await apiGetProfile(); if (!profile) return; var usernameInput = document.getElementById('profileUsername'); var displayNameInput = document.getElementById('profileDisplayName'); var personaInput = document.getElementById('profilePersona'); var saveBtn = document.getElementById('profileSaveBtn'); var messageDiv = document.getElementById('profileMessage'); var currentPwInput = document.getElementById('profileCurrentPassword'); var newPwInput = document.getElementById('profileNewPassword'); var confirmPwInput = document.getElementById('profileConfirmPassword'); var passwordBtn = document.getElementById('profilePasswordBtn'); var passwordMessageDiv = document.getElementById('profilePasswordMessage'); var logoutBtn = document.getElementById('profileLogoutBtn'); // Felder befüllen usernameInput.value = profile.username || ''; displayNameInput.value = profile.displayName || ''; personaInput.value = profile.persona || ''; // Profil speichern saveBtn.addEventListener('click', async function() { saveBtn.disabled = true; saveBtn.textContent = 'Speichern...'; messageDiv.hidden = true; try { var updated = await apiUpdateProfile({ displayName: displayNameInput.value.trim(), persona: personaInput.value.trim() }); // currentUser aktualisieren if (currentUser) { currentUser.displayName = updated.displayName; } messageDiv.textContent = 'Profil gespeichert'; messageDiv.className = 'profile-message profile-message-success'; messageDiv.hidden = false; setTimeout(function() { messageDiv.hidden = true; }, 3000); } catch (err) { messageDiv.textContent = err.message; messageDiv.className = 'profile-message profile-message-error'; messageDiv.hidden = false; } finally { saveBtn.disabled = false; saveBtn.textContent = 'Speichern'; } }); // Passwort ändern passwordBtn.addEventListener('click', async function() { passwordMessageDiv.hidden = true; var currentPw = currentPwInput.value; var newPw = newPwInput.value; var confirmPw = confirmPwInput.value; if (!currentPw || !newPw) { passwordMessageDiv.textContent = 'Alle Felder ausfüllen'; passwordMessageDiv.className = 'profile-message profile-message-error'; passwordMessageDiv.hidden = false; return; } if (newPw !== confirmPw) { passwordMessageDiv.textContent = 'Neue Passwörter stimmen nicht überein'; passwordMessageDiv.className = 'profile-message profile-message-error'; passwordMessageDiv.hidden = false; return; } passwordBtn.disabled = true; passwordBtn.textContent = 'Ändern...'; try { await apiChangePassword(currentPw, newPw); currentPwInput.value = ''; newPwInput.value = ''; confirmPwInput.value = ''; passwordMessageDiv.textContent = 'Passwort geändert'; passwordMessageDiv.className = 'profile-message profile-message-success'; passwordMessageDiv.hidden = false; setTimeout(function() { passwordMessageDiv.hidden = true; }, 3000); } catch (err) { passwordMessageDiv.textContent = err.message; passwordMessageDiv.className = 'profile-message profile-message-error'; passwordMessageDiv.hidden = false; } finally { passwordBtn.disabled = false; passwordBtn.textContent = 'Passwort ändern'; } }); // Logout logoutBtn.addEventListener('click', async function() { await apiLogout(); currentUser = null; navigateTo('login'); }); }, destroy() {} });