import { useState } from 'react' import { useTranslation } from 'react-i18next' import type { ShowSummaryDto } from '@/shared/api/types' import { Button } from '@/shared/ui/button' import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/shared/ui/dialog' /** * Подтверждение удаления шоу с выбором, что делать с его файлами. * * Галочка нужна потому, что медиа переживает шоу: серия ссылается на ассет по значению, внешнего * ключа между ними нет, и после удаления файлы остались бы в библиотеке ничьими, занимая место. * Спросить об этом здесь дешевле, чем потом искать осиротевшие гигабайты в списке медиа. */ export function DeleteShowDialog({ show, pending, onConfirm, onClose, }: Readonly<{ show: ShowSummaryDto pending: boolean onConfirm: (options: { withMedia: boolean; withSchedule: boolean }) => void onClose: () => void }>) { const { t } = useTranslation() const [withMedia, setWithMedia] = useState(false) const [withSchedule, setWithSchedule] = useState(false) const hasMedia = show.episodeCount > 0 return ( !open && onClose()}> {t('admin.shows.deleteTitle')} {t('admin.shows.deleteHint', { name: show.name })} {/* Занятость эфиром — самая частая причина отказа, и лечится она не всегда пересборкой: идущую запись она не трогает, а выключенный канал вещать и не начнёт. Поэтому здесь не только объяснение, но и способ довести удаление до конца. */} {hasMedia && ( )} ) }