"use client"; import { useMemo, useState } from "react"; import { AlertCircle, FileText, Loader2, Play, SendHorizontal } from "lucide-react"; import { api } from "@/lib/api"; import type { CrisisRoomSummary } from "@/lib/types"; interface UploadPanelProps { onResults: (summary: CrisisRoomSummary, demoMode: boolean) => void; onProcessing: (processing: boolean) => void; processing: boolean; onError?: (message: string) => void; } const QUICK_TEST_MESSAGES = [ "Hay una familia atrapada en el techo de una casa en Barrio Santa Ana, el agua sigue subiendo.", "Adulto mayor con posible fractura en el centro comunitario, necesita atención médica.", "Tenemos 20 personas refugiadas en la escuela, falta agua potable.", ]; export function UploadPanel({ onResults, onProcessing, processing, onError, }: UploadPanelProps) { const [rawMessages, setRawMessages] = useState(QUICK_TEST_MESSAGES.join("\n")); const messages = useMemo( () => rawMessages.split("\n").map((line) => line.trim()).filter(Boolean), [rawMessages], ); async function handleLoadDemo() { onProcessing(true); try { const res = await api.runDemo(); onResults(res.data as CrisisRoomSummary, false); } catch { onError?.("No se pudo ejecutar el escenario demo. Verifica que el backend esté disponible."); } finally { onProcessing(false); } } async function handleQuickProcess() { if (messages.length === 0) { return; } const sessionId = crypto.randomUUID(); const payload = { session_id: sessionId, scenario_name: "Quick Manual Intake", reports: messages.map((content) => ({ id: crypto.randomUUID(), session_id: sessionId, report_type: "text", content, metadata: { source: "frontend_quick_test" }, created_at: new Date().toISOString(), })), }; onProcessing(true); try { const res = await api.processBatch(payload); onResults(res.data as CrisisRoomSummary, false); } catch { onError?.("No se pudo procesar la prueba rápida. Revisa la conexión con el backend."); } finally { onProcessing(false); } } return (

Demo recomendada

Ejecuta el escenario Santa Ana para mostrar la tubería completa: ingestión, normalización, deduplicación, prioridad, recursos y despacho.

Prueba rápida

Pega mensajes de texto separados por línea para validar el backend sin depender del dataset demo.