import { useState, useEffect } from 'react'; import { Dialog } from 'primereact/dialog'; import { Button } from 'primereact/button'; /** * Modal zur Konfliktlösung wenn bereits encodierte Ausgabe-Ordner existieren. * * Props: * - visible: boolean * - onHide: () => void * - job: object (das Job-Objekt) * - existingFolders: Array<{ id, output_path, label, created_at }> * - onKeepBoth: () => void – "Beide behalten" geklickt * - onDeleteSelected: (selectedPaths: string[]) => void – "Auswahl löschen & neu encodieren" geklickt * - busy: boolean */ export default function ReencodeConflictModal({ visible = false, onHide, job, existingFolders = [], mode = 'reencode', onKeepBoth, onDeleteSelected, busy = false }) { const [checkedPaths, setCheckedPaths] = useState(new Set()); const isDeleteMode = String(mode || '').trim().toLowerCase() === 'delete'; // Reset on open useEffect(() => { if (visible) { setCheckedPaths(new Set()); } }, [visible]); const togglePath = (p) => { setCheckedPaths((prev) => { const next = new Set(prev); if (next.has(p)) { next.delete(p); } else { next.add(p); } return next; }); }; const toggleAll = () => { if (checkedPaths.size === existingFolders.length) { setCheckedPaths(new Set()); } else { setCheckedPaths(new Set(existingFolders.map((f) => f.output_path))); } }; const allChecked = existingFolders.length > 0 && checkedPaths.size === existingFolders.length; const someChecked = checkedPaths.size > 0 && !allChecked; const noneChecked = checkedPaths.size === 0; const title = job?.title || job?.detected_title || `Job #${job?.id || ''}`; const handleDeleteSelected = () => { const selected = [...checkedPaths]; onDeleteSelected?.(selected); }; const footer = (
); return (

{isDeleteMode ? ( <> Für {title} wurden mehrere Ausgabe-Ordner erkannt. Welche Ordner sollen gelöscht werden? ) : ( <> Für {title} existieren bereits encodierte Dateien. Wie soll mit den vorhandenen Ausgabe-Ordnern umgegangen werden? )}

{existingFolders.length > 0 ? (
{existingFolders.map((folder) => { const p = folder.output_path; const checked = checkedPaths.has(p); const folderName = p.split(/[/\\]/).filter(Boolean).pop() || p; return ( ); })}
) : (

{isDeleteMode ? 'Es wurden keine gespeicherten Ausgabe-Ordner gefunden.' : 'Es wurden keine gespeicherten Ausgabe-Ordner gefunden. Der neue Encode wird ggf. automatisch nummeriert.'}

)} {!isDeleteMode ? (
Beide behalten: Bestehende Ordner bleiben. Neuer Encode erhält eine Nummerierung (_2, _3 …).
Löschen & neu encodieren: Ausgewählte (oder alle) Ordner werden gelöscht. Wenn alle gelöscht wurden, erhält der neue Encode keine Nummerierung. Wenn nur eine Auswahl gelöscht wurde, setzt die Nummerierung fort.
) : null}
); }