import { useState, useEffect } from 'react' import { Search, Loader2, X, Film } from 'lucide-react' import { api } from '../lib/api' import { useDarkMode } from '../context/ThemeContext' // „Nicht korrekt?!"-Popup (Commander-Wunsch 23.07.): Korrektur direkt am // Dashboard — suchen, richtigen Treffer anklicken, Rippy merkt sich die Wahl // für diese Disc (30 Tage, per Disc-Fingerabdruck). interface SuchKandidat { title: string year?: number poster?: string overview?: string type: string source: string id?: string } interface Props { devicePath: string vorschlag?: string isOpen: boolean onClose: () => void onUebernommen: () => void } export default function MetadataKorrektur({ devicePath, vorschlag, isOpen, onClose, onUebernommen }: Props) { const [suchbegriff, setSuchbegriff] = useState('') const [kandidaten, setKandidaten] = useState([]) const [laeuft, setLaeuft] = useState(false) const [fehler, setFehler] = useState(null) const { theme } = useDarkMode() useEffect(() => { if (isOpen) { setSuchbegriff(vorschlag || '') setKandidaten([]) setFehler(null) } }, [isOpen, vorschlag]) const suchen = async () => { if (!suchbegriff) return setLaeuft(true) setFehler(null) try { const r = await api.get('/metadata/search', { params: { q: suchbegriff } }) setKandidaten(r.data) if (r.data.length === 0) setFehler('Nichts gefunden — anderen Suchbegriff probieren.') } catch { setFehler('Suche fehlgeschlagen.') } finally { setLaeuft(false) } } const waehlen = async (k: SuchKandidat) => { try { await api.post('/metadata/override', { device_path: devicePath, title: k.title, year: k.year, poster: k.poster, overview: k.overview, type: k.type, source: k.source, id: k.id, }) onUebernommen() onClose() } catch { setFehler('Übernehmen fehlgeschlagen.') } } if (!isOpen) return null return (

Richtigen Titel wählen

Deine Wahl gilt für diese Disc — auch beim nächsten Einlegen.

setSuchbegriff(e.target.value)} onKeyDown={e => e.key === 'Enter' && suchen()} autoFocus placeholder="Titel eingeben…" className={`flex-1 px-4 py-2 border rounded-lg focus:ring-2 focus:ring-indigo-500 focus:border-transparent ${theme === 'dark' ? 'bg-slate-700 border-slate-600 text-slate-100' : 'bg-white border-slate-300 text-slate-900'}`} />
{fehler &&

{fehler}

} {kandidaten.length > 0 && (
{kandidaten.map((k, i) => ( ))}
)}
) }