import { useState } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import { Toaster } from 'react-hot-toast'; import VideoInput from './components/VideoInput'; import AnalysisDashboard from './components/AnalysisDashboard'; import ClipCustomizer from './components/ClipCustomizer'; import GenerationTracker from './components/GenerationTracker'; import DownloadGrid from './components/DownloadGrid'; const STEPS = ['input', 'analysis', 'customize', 'generate', 'download']; function App() { const [currentStep, setCurrentStep] = useState('input'); const [sessionId, setSessionId] = useState(null); const [metadata, setMetadata] = useState(null); const [analysis, setAnalysis] = useState(null); const [clipConfigs, setClipConfigs] = useState([]); const [generationStatus, setGenerationStatus] = useState(null); const goToStep = (step) => setCurrentStep(step); const handleVideoLoaded = (sessionData) => { setSessionId(sessionData.session_id); setMetadata(sessionData.metadata); goToStep('analysis'); }; const handleAnalysisComplete = (analysisData) => { setAnalysis(analysisData); // Initialize clip configs from candidates const configs = analysisData.clip_candidates.map((candidate) => ({ clip_id: candidate.id, title: candidate.title || '', caption_style: 'heatwave', voice_preset: 'energetic_male', music_genre: 'energetic_electronic', color_grade: 'teal_orange', include_original_audio: false, include_stock_images: true, })); setClipConfigs(configs); goToStep('customize'); }; const handleCustomizeDone = (configs) => { setClipConfigs(configs); goToStep('generate'); }; const handleGenerationComplete = (status) => { setGenerationStatus(status); goToStep('download'); }; return (