import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { useState } from 'react' import { useTranslation } from 'react-i18next' import { AlertTriangle } from 'lucide-react' import { HttpError } from '@/shared/api/client' import { Button } from '@/shared/ui/button' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/shared/ui/card' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/shared/ui/select' import { toast } from '@/shared/ui/toast-store' import { listShows } from '@/features/admin/shows/api' import { clearAllMedia, deleteAllShows, deleteShowMedia } from './api' export function MaintenancePanel() { const { t } = useTranslation() const queryClient = useQueryClient() const [showId, setShowId] = useState('') const { data: shows } = useQuery({ queryKey: ['admin', 'shows'], queryFn: () => listShows() }) const onError = (error: unknown) => toast.error(error instanceof HttpError ? error.detail : t('common.error')) // Затрагиваются медиа/шоу/каналы — сбрасываем все связанные кэши. const invalidateAll = () => { for (const key of [['admin', 'media'], ['admin', 'shows'], ['admin', 'channels']]) void queryClient.invalidateQueries({ queryKey: key }) } const clearMedia = useMutation({ mutationFn: clearAllMedia, onSuccess: (count) => { toast.success(t('admin.maintenance.doneCount', { count })) invalidateAll() }, onError, }) const clearShows = useMutation({ mutationFn: deleteAllShows, onSuccess: (count) => { toast.success(t('admin.maintenance.doneCount', { count })) invalidateAll() }, onError, }) const clearShowMedia = useMutation({ mutationFn: () => deleteShowMedia(showId), onSuccess: (count) => { setShowId('') toast.success(t('admin.maintenance.doneCount', { count })) invalidateAll() }, onError, }) const confirmed = (message: string, run: () => void) => { if (window.confirm(message)) run() } return (

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

{t('admin.maintenance.warning')}

{t('admin.maintenance.clearMedia')} {t('admin.maintenance.clearMediaHint')} {t('admin.maintenance.clearShowMedia')} {t('admin.maintenance.clearShowMediaHint')} {t('admin.maintenance.deleteShows')} {t('admin.maintenance.deleteShowsHint')}
) }