import React, { useEffect, useState } from 'react'; import { Product } from '../types'; import { RefreshCw, AlertCircle, Sparkles, ScanFace, Timer, Play, ChevronDown, ChevronUp, Bug } from 'lucide-react'; interface ResultViewProps { originalImage: string; generatedImage: string | null; product: Product; loading: boolean; error: string | null; retryAfter: number | null; onRetake: () => void; onRetry: () => void; } const ResultView: React.FC = ({ originalImage, generatedImage, product, loading, error, retryAfter, onRetake, onRetry }) => { const [progressStep, setProgressStep] = useState(0); const [timeLeft, setTimeLeft] = useState(null); const [showDetails, setShowDetails] = useState(false); useEffect(() => { if (loading) { setProgressStep(0); const interval = setInterval(() => { setProgressStep(prev => (prev < 3 ? prev + 1 : prev)); }, 2000); return () => clearInterval(interval); } }, [loading]); useEffect(() => { if (retryAfter !== null) { setTimeLeft(retryAfter); const timer = setInterval(() => { setTimeLeft(prev => (prev !== null && prev > 0 ? prev - 1 : 0)); }, 1000); return () => clearInterval(timer); } else { setTimeLeft(null); } }, [retryAfter]); const loadingTexts = [ "Encoding micro-pixels...", "Analyzing garment...", "Synthesizing fit...", "Almost there..." ]; return (
{/* Sidebar Preview */}

Source

Original
item
{/* Result Area */}

AI Studio

{loading && (

Generating...

{loadingTexts[progressStep]}

)} {timeLeft !== null && (

AI Cooling Down

To prevent errors, please wait 2 minutes between attempts on the free tier.

{timeLeft}s
)} {error && timeLeft === null && (

Service Delay

The AI encountered a limit. Wait a moment then retry.

{showDetails && (
{error}
)}
)} {!loading && !error && !timeLeft && generatedImage && ( Result )}
{!loading && !error && !timeLeft && generatedImage && (
)}
); }; export default ResultView;