import { Button } from '@/components/ui'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/Card.tsx'; import { Switch } from '@/components/ui/Switch.tsx'; import Textarea from '@/components/ui/Textarea.tsx'; import { useMaintenanceSetting, useSetMaintenance, useSystemHealth, } from '@/hooks/api/useAdminAPI.ts'; import { useTranslation } from '@/hooks/useI18n.tsx'; import { useToast } from '@/hooks/useToast.ts'; import { useState } from 'react'; const AdminSettingsMaintenancePage = () => { const { t } = useTranslation(); const { data: health, isLoading } = useSystemHealth(); const { success } = useToast(); const { data: maintenance } = useMaintenanceSetting(); const setMaintenance = useSetMaintenance(); // Initialize state with lazy initializers that will get fresh data const [enabled, setEnabled] = useState(() => maintenance?.enabled ?? false); const [message, setMessage] = useState(() => maintenance?.message ?? ''); const [allowedIPsText, setAllowedIPsText] = useState(() => (maintenance?.allowedIPs || []).join(', ') ); const handleToggle = () => { setEnabled(!enabled); success( !enabled ? t('admin.settings.maintenance.enabled') : t('admin.settings.maintenance.disabled') ); }; const handleSave = async () => { const allowedIPs = allowedIPsText .split(',') .map((s) => s.trim()) .filter(Boolean); await setMaintenance.mutateAsync({ enabled, message, allowedIPs }); success(t('admin.settings.maintenance.saved')); }; return (

{t('admin.settings.maintenance.title')}

{t('admin.settings.maintenance.subtitle')}

{t('admin.settings.systemHealth')} {isLoading ? (

{t('common.loading')}

) : (
{t('admin.status')} {health?.status ?? 'unknown'}
{t('admin.db')} {health?.database ?? 'unknown'}
{t('admin.cache')} {health?.cache ?? 'unknown'}
)}
{t('admin.settings.maintenance.controls')} {maintenance?.enabled && (
{t('admin.settings.maintenance.active')}
{maintenance.message}
)}
{enabled ? t('admin.settings.maintenance.enabled') : t('admin.settings.maintenance.disabled')}