import { useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { familyApi, userApi, authApi } from '../api/client'; import { useStore } from '../store/useStore'; import type { Theme } from '../types'; import { User as UserIcon, Users, Settings, AlertTriangle, ArrowLeft, Loader2, Check, Palette, Languages, LogOut, Edit3, Save, X, } from 'lucide-react'; const THEMES: { id: Theme; gradient: string }[] = [ { id: 'light', gradient: 'bg-gradient-to-r from-gray-100 to-gray-200' }, { id: 'dark', gradient: 'bg-gradient-to-r from-black to-gray-900' }, { id: 'sunset', gradient: 'bg-gradient-to-r from-orange-400 to-pink-500' }, { id: 'ocean', gradient: 'bg-gradient-to-r from-blue-400 to-cyan-500' }, { id: 'forest', gradient: 'bg-gradient-to-r from-green-400 to-teal-500' }, { id: 'purple', gradient: 'bg-gradient-to-r from-purple-500 to-pink-500' }, ]; export default function Profile() { const { t, i18n } = useTranslation(); const navigate = useNavigate(); const { user, selectedFamily, setSelectedFamily, setUser, preferences, setPreferences, familyMembers, setFamilyMembers } = useStore(); const [membersLoading, setMembersLoading] = useState(false); const [leavingFamily, setLeavingFamily] = useState(false); const [editingName, setEditingName] = useState(false); const [newFamilyName, setNewFamilyName] = useState(''); const [savingName, setSavingName] = useState(false); useEffect(() => { if (user?.family_id) { loadFamily(); } }, [user?.family_id]); useEffect(() => { if (user?.family_id && selectedFamily) { loadMembers(); } }, [user?.family_id, selectedFamily]); const loadFamily = async () => { if (!user?.family_id) return; try { const response = await familyApi.getById(user.family_id); setSelectedFamily(response.data); } catch (err) { console.error('Error loading family:', err); } }; const loadMembers = async () => { if (!user?.family_id) return; try { setMembersLoading(true); const response = await familyApi.getMembers(user.family_id); console.log('Loaded members:', response.data); setFamilyMembers(response.data); } catch (err) { console.error('Error loading members:', err); } finally { setMembersLoading(false); } }; const handleLeaveFamily = async () => { if (!confirm(t('profile.leaveConfirm'))) return; try { setLeavingFamily(true); await userApi.leaveFamily(); const meResponse = await authApi.me(); setUser(meResponse.data); setSelectedFamily(null); setFamilyMembers([]); navigate('/'); } catch (err) { console.error('Error leaving family:', err); alert(t('profile.leaveError')); } finally { setLeavingFamily(false); } }; const handleThemeChange = (theme: Theme) => { setPreferences({ theme }); document.documentElement.setAttribute('data-theme', theme); }; const handleLocaleChange = (locale: 'ru' | 'en') => { setPreferences({ locale }); i18n.changeLanguage(locale); }; const handleStartEditName = () => { setNewFamilyName(selectedFamily?.name || ''); setEditingName(true); }; const handleSaveName = async () => { if (!selectedFamily || !newFamilyName.trim()) return; try { setSavingName(true); const response = await familyApi.update(selectedFamily.id, { name: newFamilyName.trim() }); setSelectedFamily(response.data); setEditingName(false); } catch (err) { console.error('Error updating family name:', err); alert(t('profile.renameError')); } finally { setSavingName(false); } }; const handleBack = () => { if (user?.family_id) { navigate(`/family/${user.family_id}`); } else { navigate('/'); } }; return (
{t('profile.leaveDescription')}