import React, { useState, useEffect } from 'react'; import { VlaData, Interaction } from '../types'; import { TaskSegmentCard } from './TaskSegmentCard'; import { Loader, AlertTriangle, WandSparkles, Copy, Check, Download } from './Icons'; type HighlightPoint = { x: number; y: number; isEditing: boolean } | null; type CoordinatePickerCallback = ((coords: { x: number; y: number }) => void) | null; interface ResultsDisplayProps { vlaData: VlaData | null; isLoading: boolean; loadingMessage: string; error: string | null; hasVideo: boolean; videoDuration: number; totalFrames: number; usedFallback: boolean; onDownload: () => void; onSeekToTime: (time: number) => void; onUpdateInteraction: (taskId: number, interactionIndex: number, updatedInteraction: Interaction) => void; onHighlightPoint: (point: HighlightPoint) => void; onSetCoordinatePicker: (callback: CoordinatePickerCallback) => void; } export const ResultsDisplay: React.FC = ({ vlaData, isLoading, loadingMessage, error, hasVideo, videoDuration, totalFrames, usedFallback, onDownload, onSeekToTime, onUpdateInteraction, onHighlightPoint, onSetCoordinatePicker }) => { const [hasCopied, setHasCopied] = useState(false); useEffect(() => { if(hasCopied) { const timer = setTimeout(() => setHasCopied(false), 2000); return () => clearTimeout(timer); } }, [hasCopied]); const handleCopy = () => { if(vlaData) { navigator.clipboard.writeText(JSON.stringify(vlaData, null, 2)); setHasCopied(true); } }; const renderContent = () => { if (isLoading) { return (

Analyzing Video

{loadingMessage}

); } if (error) { return (

Analysis Failed

{error}

); } if (vlaData) { return (

Overall Goal

{vlaData.overallGoal}

Sequential Tasks

{vlaData.tasks.map((task) => ( ))}
); } return (

Analysis Results

{hasVideo ? 'Click "Generate Action Data" to begin the analysis.' : 'Upload a video to get started.'}

); }; return (

Generated Data

{vlaData && (
)}
{usedFallback && !isLoading && vlaData && (
)}
{renderContent()}
); };