'use client'; import { Box, Typography, Card, CardContent, TextField, Button, Divider, Switch, FormControlLabel, Alert, CircularProgress, Snackbar } from '@mui/material'; import { Save, Logout } from '@mui/icons-material'; import { useAuth } from '@/lib/auth/AuthContext'; import { useState, useEffect } from 'react'; import { AppShell } from '@/components/layouts/AppShell/AppShell'; import { ProtectedRoute } from '@/components/common/ProtectedRoute'; import { usersApi } from '@/lib/api/users'; import { MFASettings } from '@/components/settings/MFASettings'; import { SessionsManagement } from '@/components/settings/SessionsManagement'; import { DeviceTrustManagement } from '@/components/settings/DeviceTrustManagement'; import { BiometricSettings } from '@/components/settings/BiometricSettings'; import { motion } from 'framer-motion'; export default function SettingsPage() { const { user, logout, refreshUser } = useAuth(); const [name, setName] = useState(user?.name || ''); const [settings, setSettings] = useState({ notifications: true, emailUpdates: false, darkMode: false, }); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(null); const [successMessage, setSuccessMessage] = useState(null); const [nameError, setNameError] = useState(null); // Load preferences from user object when it changes useEffect(() => { if (user?.preferences) { setSettings({ notifications: user.preferences.notifications ?? true, emailUpdates: user.preferences.emailUpdates ?? false, darkMode: user.preferences.darkMode ?? false, }); } }, [user?.preferences]); // Sync name state when user data changes useEffect(() => { if (user?.name) { setName(user.name); } }, [user]); const handleSave = async () => { // Validate name if (!name || name.trim() === '') { setNameError('Name cannot be empty'); return; } setIsLoading(true); setError(null); setNameError(null); try { const response = await usersApi.updateProfile({ name: name.trim(), preferences: settings }); console.log('✅ Profile updated successfully:', response); // Refresh user to get latest data from server await refreshUser(); setSuccessMessage('Profile updated successfully!'); } catch (err: any) { console.error('❌ Failed to update profile:', err); console.error('Error response:', err.response); setError(err.response?.data?.message || err.message || 'Failed to update profile. Please try again.'); } finally { setIsLoading(false); } }; const handleLogout = async () => { await logout(); }; return ( Settings Manage your account settings and preferences {/* Error Alert */} {error && ( setError(null)}> {error} )} {/* Profile Settings */} Profile Information { setName(e.target.value); if (nameError) setNameError(null); }} fullWidth error={!!nameError} helperText={nameError} disabled={isLoading} /> {/* Notification Settings */} Notifications setSettings({ ...settings, notifications: e.target.checked })} disabled={isLoading} /> } label="Push Notifications" /> setSettings({ ...settings, emailUpdates: e.target.checked })} disabled={isLoading} /> } label="Email Updates" /> {/* Appearance Settings */} Appearance setSettings({ ...settings, darkMode: e.target.checked })} /> } label="Dark Mode (Coming Soon)" disabled /> {/* Security Settings - MFA */} {/* Sessions Management */} {/* Device Trust Management */} {/* Biometric Authentication */} {/* Account Actions */} Account Actions {/* Success Snackbar */} setSuccessMessage(null)} anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }} > setSuccessMessage(null)} severity="success" sx={{ width: '100%' }}> {successMessage} ); }