import { useEffect, useState } from 'react' import { Settings, Power, Monitor, Clock, Globe, LogOut, Download, RefreshCw, Check, AlertCircle } from 'lucide-react' import { useNavigate } from 'react-router-dom' import { useAuthStore } from '../store/auth' import { GlassCard } from '../components/ui/GlassCard' import { NeonButton } from '../components/ui/NeonButton' import { Input } from '../components/ui/Input' import type { AppSettings } from '@shared/types' export function SettingsPage() { const navigate = useNavigate() const { user, logout } = useAuthStore() const [settings, setSettings] = useState(null) const [isSaving, setIsSaving] = useState(false) const [appVersion, setAppVersion] = useState('') const [updateStatus, setUpdateStatus] = useState<'idle' | 'checking' | 'available' | 'not-available' | 'error'>('idle') const [updateVersion, setUpdateVersion] = useState('') const [updateError, setUpdateError] = useState('') useEffect(() => { window.electronAPI.getSettings().then(setSettings) window.electronAPI.getAppVersion().then(setAppVersion) }, []) const handleCheckForUpdates = async () => { setUpdateStatus('checking') setUpdateError('') try { const result = await window.electronAPI.checkForUpdates() if (result.error) { setUpdateStatus('error') setUpdateError(result.error) } else if (result.available) { setUpdateStatus('available') setUpdateVersion(result.version || '') } else { setUpdateStatus('not-available') } } catch (err) { setUpdateStatus('error') setUpdateError('Ошибка проверки') } } const handleInstallUpdate = () => { window.electronAPI.installUpdate() } const handleToggle = async (key: keyof AppSettings, value: boolean) => { if (!settings) return setIsSaving(true) try { await window.electronAPI.saveSettings({ [key]: value }) setSettings({ ...settings, [key]: value }) } finally { setIsSaving(false) } } const handleApiUrlChange = async (url: string) => { if (!settings) return setSettings({ ...settings, apiUrl: url }) } const handleApiUrlSave = async () => { if (!settings) return setIsSaving(true) try { await window.electronAPI.saveSettings({ apiUrl: settings.apiUrl }) } finally { setIsSaving(false) } } const handleLogout = async () => { await logout() navigate('/login') } if (!settings) { return (
) } return (
{/* Header */}

Настройки

{/* User info */}
{user?.nickname?.charAt(0).toUpperCase() || 'U'}

{user?.nickname}

@{user?.login}

} onClick={handleLogout}> Выйти
{/* Settings */}
{/* Auto-launch */}

Автозапуск

Запускать при старте Windows

{/* Minimize to tray */}

Сворачивать в трей

При закрытии скрывать в трей

{/* Tracking interval */}

Интервал проверки

Как часто проверять процессы

{/* Updates */}

Обновления

{updateStatus === 'checking' && 'Проверка...'} {updateStatus === 'available' && `Доступна v${updateVersion}`} {updateStatus === 'not-available' && 'Актуальная версия'} {updateStatus === 'error' && (updateError || 'Ошибка')} {updateStatus === 'idle' && `Текущая версия: v${appVersion}`}

{updateStatus === 'available' ? ( Установить ) : ( )}
{/* API URL (for developers) */}

API URL

Для разработки

handleApiUrlChange(e.target.value)} placeholder="http://localhost:8000/api/v1" className="flex-1" /> Сохранить
{/* Version */}

Game Marathon Tracker v{appVersion || '...'}

) }