// ➕ Add a new user async function addNewUser() { const username = document.getElementById("newUsername").value.trim(); const password = document.getElementById("newPassword").value; const role = document.getElementById("newRole").value; const msg = document.getElementById("userAddMessage"); const hashPreview = document.getElementById("hashPreview"); if (!username || !password) { msg.textContent = "Please fill out all fields."; return; } const hash = hashPassword(password); if (hashPreview) hashPreview.textContent = hash; try { await fetch('/addUser', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username, hash, role }) }); msg.textContent = `✅ User "${username}" added to server.`; document.getElementById("newUsername").value = ''; document.getElementById("newPassword").value = ''; if (hashPreview) hashPreview.textContent = '[auto]'; await loadUsers(); displayUserDropdown(); } catch (e) { msg.textContent = "❌ Failed to add user."; console.error("Add user error:", e); } } // 🗑 Populate and delete users function displayUserDropdown() { const dropdown = document.getElementById("userDropdown"); dropdown.innerHTML = ``; users.forEach(user => { dropdown.innerHTML += ``; }); } function selectUserAction(username) { if (!username) return; if (!confirm(`Are you sure you want to delete user "${username}"?`)) { document.getElementById("userDropdown").value = ""; return; } fetch("/deleteUser", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ username }) }) .then(res => res.text()) .then(msg => { alert(msg); loadUsers().then(displayUserDropdown); }); } // 📚 Save or clear word list for current user async function saveWords() { const selectedUser = document.getElementById('wordUserSelect')?.value; if (!selectedUser) { alert("⚠️ Please select a user before saving."); return; } const text = document.getElementById('wordInput').value.trim(); allWords = text.split('\n').map(w => w.trim()).filter(Boolean); await fetch('/saveWordList', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username: selectedUser, words: allWords }) }); displayWordList(); alert(`✅ Word list saved to server for ${selectedUser}`); } async function clearWords() { const selectedUser = document.getElementById('wordUserSelect')?.value; if (!selectedUser) return; allWords = []; await fetch('/saveWordList', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username: selectedUser, words: [] }) }); displayWordList(); alert(`🗑 Word list cleared for ${selectedUser}`); } // 🗂 Load and display word lists async function loadWordsForSelectedUser() { const selectedUser = document.getElementById("wordUserSelect").value; if (!selectedUser) return; const res = await fetch(`/getWordList?user=${encodeURIComponent(selectedUser)}`); allWords = await res.json(); displayWordList(); } function displayWordList() { const ul = document.getElementById('wordListDisplay'); ul.innerHTML = allWords.map(word => `