import { useState, useEffect } from 'react'; import { Box, Card, CardContent, Typography, Switch, FormControlLabel, TextField, Button, Alert, CircularProgress, } from '@mui/material'; import BuildIcon from '@mui/icons-material/Build'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { settingsApi } from '../../services/settings'; import { useNotification } from '../../contexts/NotificationContext'; export default function ServiceModeTab() { const queryClient = useQueryClient(); const { showSuccess, showError } = useNotification(); const { data: setting, isLoading } = useQuery({ queryKey: ['admin', 'settings', 'service_mode'], queryFn: () => settingsApi.get('service_mode'), }); const currentValue = setting?.value ?? { active: false, message: '' }; const [active, setActive] = useState(currentValue.active ?? false); const [message, setMessage] = useState(currentValue.message ?? ''); const [endsAt, setEndsAt] = useState(''); // Sync state when data loads useEffect(() => { if (setting?.value) { setActive(setting.value.active ?? false); setMessage(setting.value.message ?? ''); setEndsAt(setting.value.ends_at ?? ''); } }, [setting]); const mutation = useMutation({ mutationFn: (value: { active: boolean; message: string; ends_at?: string | null }) => settingsApi.update('service_mode', value), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['service-mode'] }); queryClient.invalidateQueries({ queryKey: ['admin', 'settings', 'service_mode'] }); showSuccess(active ? 'Wartungsmodus aktiviert' : 'Wartungsmodus deaktiviert'); }, onError: () => showError('Einstellung konnte nicht gespeichert werden'), }); const handleSave = () => { mutation.mutate({ active, message, ends_at: endsAt || null }); }; if (isLoading) { return ; } return ( Wartungsmodus {active && ( Wartungsmodus ist aktiv. Normale Benutzer sehen die Wartungsseite. )} {active && endsAt && ( Wartungsmodus endet automatisch am {new Date(endsAt).toLocaleString('de-DE')}. )} setActive(e.target.checked)} color="error" /> } label={active ? 'Wartungsmodus aktiviert' : 'Wartungsmodus deaktiviert'} sx={{ mb: 3, display: 'block' }} /> setMessage(e.target.value)} sx={{ mb: 3 }} helperText="Diese Nachricht sehen Benutzer auf der Wartungsseite." /> setEndsAt(e.target.value)} InputLabelProps={{ shrink: true }} helperText="Optional: Wartungsmodus wird automatisch zu diesem Zeitpunkt deaktiviert." sx={{ mb: 3, '& input': { color: 'text.primary' } }} /> ); }