import { useState, useEffect } from 'react'; import { User, Lock, Server, MessageSquare, Shield, TrendingUp, Eye, EyeOff } from 'lucide-react'; import axios from 'axios'; import { API_URL } from '../config'; import { notify } from './NotificationSystem'; export default function Profile({ token, user, onUsernameChange, viewingUsername }) { const [stats, setStats] = useState(null); const [loading, setLoading] = useState(true); const [activeTab, setActiveTab] = useState('overview'); const isViewingOther = viewingUsername && viewingUsername !== user?.username; // Форма смены имени const [usernameForm, setUsernameForm] = useState({ new_username: '', password: '' }); const [usernameLoading, setUsernameLoading] = useState(false); const [showUsernamePassword, setShowUsernamePassword] = useState(false); // Форма смены пароля const [passwordForm, setPasswordForm] = useState({ old_password: '', new_password: '', confirm_password: '' }); const [passwordLoading, setPasswordLoading] = useState(false); const [showOldPassword, setShowOldPassword] = useState(false); const [showNewPassword, setShowNewPassword] = useState(false); useEffect(() => { loadStats(); }, [viewingUsername]); const loadStats = async () => { try { const endpoint = isViewingOther ? `${API_URL}/api/profile/stats/${viewingUsername}` : `${API_URL}/api/profile/stats`; const { data } = await axios.get(endpoint, { headers: { Authorization: `Bearer ${token}` } }); setStats(data); setLoading(false); } catch (error) { console.error('Ошибка загрузки статистики:', error); setLoading(false); } }; const handleUsernameChange = async (e) => { e.preventDefault(); if (!usernameForm.new_username.trim() || !usernameForm.password) { alert('Заполните все поля'); return; } setUsernameLoading(true); try { const { data } = await axios.put( `${API_URL}/api/profile/username`, usernameForm, { headers: { Authorization: `Bearer ${token}` } } ); localStorage.setItem('token', data.access_token); notify('success', 'Имя изменено', `Ваше новое имя: ${data.username}`); alert('Имя пользователя успешно изменено!'); setUsernameForm({ new_username: '', password: '' }); if (onUsernameChange) { onUsernameChange(data.access_token, data.username); } loadStats(); } catch (error) { notify('error', 'Ошибка изменения', error.response?.data?.detail || 'Не удалось изменить имя'); alert(error.response?.data?.detail || 'Ошибка изменения имени пользователя'); } finally { setUsernameLoading(false); } }; const handlePasswordChange = async (e) => { e.preventDefault(); if (!passwordForm.old_password || !passwordForm.new_password || !passwordForm.confirm_password) { alert('Заполните все поля'); return; } if (passwordForm.new_password !== passwordForm.confirm_password) { alert('Новые пароли не совпадают'); return; } if (passwordForm.new_password.length < 6) { alert('Новый пароль должен быть не менее 6 символов'); return; } setPasswordLoading(true); try { await axios.put( `${API_URL}/api/profile/password`, { old_password: passwordForm.old_password, new_password: passwordForm.new_password }, { headers: { Authorization: `Bearer ${token}` } } ); notify('success', 'Пароль изменён', 'Ваш пароль успешно обновлен'); alert('Пароль успешно изменён!'); setPasswordForm({ old_password: '', new_password: '', confirm_password: '' }); } catch (error) { notify('error', 'Ошибка изменения', error.response?.data?.detail || 'Не удалось изменить пароль'); alert(error.response?.data?.detail || 'Ошибка изменения пароля'); } finally { setPasswordLoading(false); } }; const getRoleName = (role) => { switch (role) { case 'owner': return 'Владелец'; case 'admin': return 'Администратор'; case 'support': return 'Тех. поддержка'; case 'banned': return 'Забанен'; default: return 'Пользователь'; } }; const getRoleColor = (role) => { switch (role) { case 'owner': return 'bg-yellow-500/20 text-yellow-500 border-yellow-500/50'; case 'admin': return 'bg-blue-500/20 text-blue-500 border-blue-500/50'; case 'support': return 'bg-purple-500/20 text-purple-500 border-purple-500/50'; case 'banned': return 'bg-red-500/20 text-red-500 border-red-500/50'; default: return 'bg-gray-500/20 text-gray-500 border-gray-500/50'; } }; if (loading) { return (
Загрузка профиля...
{isViewingOther ? 'Просмотр профиля другого пользователя' : 'Управление профилем и настройками'}
Всего серверов
{stats?.total_servers || 0}
Мои тикеты
{stats?.tickets?.total || 0}
Ваша роль
{getRoleName(stats?.role)}
{server.displayName}
{server.name}