"use client"; import { useState } from "react"; import { Trash2, Check, Pencil, X, Loader2, Brain } from "lucide-react"; import type { ExtractedDeadline } from "@/lib/types"; interface ExtractionResultsProps { deadlines: ExtractedDeadline[]; onAdopt: (deadlines: ExtractedDeadline[]) => void; isAdopting: boolean; } function confidenceColor(confidence: number): string { if (confidence >= 0.8) return "bg-green-100 text-green-800"; if (confidence >= 0.5) return "bg-yellow-100 text-yellow-800"; return "bg-red-100 text-red-800"; } function confidenceLabel(confidence: number): string { if (confidence >= 0.8) return "Hoch"; if (confidence >= 0.5) return "Mittel"; return "Niedrig"; } const editInputClass = "w-full rounded border border-neutral-300 px-2 py-1 text-sm outline-none transition-colors focus:border-neutral-400 focus:ring-1 focus:ring-neutral-400"; export function ExtractionResults({ deadlines: initialDeadlines, onAdopt, isAdopting, }: ExtractionResultsProps) { const [deadlines, setDeadlines] = useState(initialDeadlines); const [editingIndex, setEditingIndex] = useState(null); const [editForm, setEditForm] = useState(null); function removeDeadline(index: number) { setDeadlines((prev) => prev.filter((_, i) => i !== index)); } function startEdit(index: number) { setEditingIndex(index); setEditForm({ ...deadlines[index] }); } function cancelEdit() { setEditingIndex(null); setEditForm(null); } function saveEdit() { if (editingIndex === null || !editForm) return; setDeadlines((prev) => prev.map((d, i) => (i === editingIndex ? editForm : d)), ); setEditingIndex(null); setEditForm(null); } if (deadlines.length === 0) { return (

Keine Fristen gefunden. Alle extrahierten Fristen wurden entfernt.

); } return (

{deadlines.length} Frist{deadlines.length !== 1 ? "en" : ""} erkannt

{/* Mobile: card layout, Desktop: table */}
{deadlines.map((d, i) => ( {editingIndex === i && editForm ? ( <> ) : ( <> )} ))}
Frist Fälligkeitsdatum Rechtsgrundlage Konfidenz Quellenangabe Aktionen
setEditForm({ ...editForm, title: e.target.value }) } className={editInputClass} /> setEditForm({ ...editForm, due_date: e.target.value || null, }) } className={editInputClass} /> setEditForm({ ...editForm, rule_reference: e.target.value, }) } className={editInputClass} /> {confidenceLabel(editForm.confidence)} {editForm.source_quote}
{d.title} {d.due_date ? new Date(d.due_date).toLocaleDateString("de-DE") : `${d.duration_value} ${d.duration_unit}`} {d.rule_reference || "-"} {confidenceLabel(d.confidence)}{" "} {Math.round(d.confidence * 100)}% {d.source_quote || "-"}
{/* Mobile card layout */}
{deadlines.map((d, i) => (

{d.title}

{d.due_date ? new Date(d.due_date).toLocaleDateString("de-DE") : `${d.duration_value} ${d.duration_unit}`} {d.rule_reference && ( <> · {d.rule_reference} )} {confidenceLabel(d.confidence)} {Math.round(d.confidence * 100)} %
))}
); }