import { useMemo, useState } from "react"; import * as sync from "../syncEngine"; import { I } from "./icons.jsx"; /* ═══════ ACCOUNT MENU ═══════ */ export function AccountMenu({ user, onClose, onLogout, onUserUpdate, onOpenAdmin, onExportAll, dark }) { const [tab, setTab] = useState("profile"); // profile | username | password const [displayName, setDisplayName] = useState(user?.displayName || ""); const [newUsername, setNewUsername] = useState(user?.username || ""); const [usernamePass, setUsernamePass] = useState(""); const [curPass, setCurPass] = useState(""); const [newPass, setNewPass] = useState(""); const [newPass2, setNewPass2] = useState(""); const [msg, setMsg] = useState(""); const [err, setErr] = useState(""); const [saving, setSaving] = useState(false); const T = useMemo( () => ({ bg: dark ? "#161b22" : "#fff", border: dark ? "#30363d" : "#d0d7de", text: dark ? "#e6edf3" : "#1f2328", muted: dark ? "#8b949e" : "#656d76", accent: dark ? "#388bfd" : "#0969da", danger: dark ? "#f85149" : "#cf222e", success: dark ? "#3fb950" : "#1a7f37", inputBg: dark ? "#0d1117" : "#f6f8fa", }), [dark] ); const inp = { width: "100%", padding: "10px 14px", borderRadius: 10, border: `1px solid ${T.border}`, background: T.inputBg, color: T.text, fontSize: 14, outline: "none", boxSizing: "border-box", marginBottom: 10, fontFamily: "'DM Sans',sans-serif", }; const tbtn = (active) => ({ padding: "7px 14px", borderRadius: 8, border: "none", cursor: "pointer", fontSize: 12, fontWeight: 600, background: active ? T.accent + "22" : "transparent", color: active ? T.accent : T.muted, }); const clear = () => { setMsg(""); setErr(""); }; const saveProfile = async () => { if (!displayName.trim()) return; clear(); setSaving(true); try { const u = await sync.updateProfile(displayName.trim()); onUserUpdate(u); setMsg("Display name updated"); } catch (e) { setErr(e.message); } setSaving(false); }; const saveUsername = async () => { if (!newUsername || !usernamePass) return; clear(); setSaving(true); try { const u = await sync.updateUsername(newUsername.trim(), usernamePass); onUserUpdate(u); setUsernamePass(""); setMsg("Username updated"); } catch (e) { setErr(e.message); } setSaving(false); }; const savePassword = async () => { if (!curPass || !newPass) return; if (newPass !== newPass2) { setErr("Passwords don't match"); return; } clear(); setSaving(true); try { await sync.updatePassword(curPass, newPass); setCurPass(""); setNewPass(""); setNewPass2(""); setMsg("Password changed"); } catch (e) { setErr(e.message); } setSaving(false); }; return (