'use client'; import { useEffect, useState, Suspense } from 'react'; import { useRouter, useSearchParams } from 'next/navigation'; interface FileResult { url: string; contentType: string; format?: string; width?: number; height?: number; duration?: number; } interface ResultData { status: string; scenarioName?: string; requestPayload?: { prompt?: string }; files?: FileResult[]; } function ResultContent() { const router = useRouter(); const searchParams = useSearchParams(); const generationUuid = searchParams.get('generationUuid'); const [result, setResult] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(''); const [autoRefresh, setAutoRefresh] = useState(false); useEffect(() => { if (generationUuid) { loadResult(); } else { setError('Не указан generationUuid'); setLoading(false); } return () => { if (autoRefresh) { // Cleanup если нужно } }; }, [generationUuid]); async function loadResult() { if (!generationUuid) return; try { const response = await fetch(`/api/result/${generationUuid}`, { credentials: 'same-origin', }); const data = await response.json(); if (!response.ok) { throw new Error(data.message || 'Ошибка загрузки результата'); } setResult(data.result); setError(''); setLoading(false); // Авто-обновление если ещё генерируется if (data.result.status === 'running' || data.result.status === 'waiting_for_input') { setAutoRefresh(true); setTimeout(loadResult, 3000); } else { setAutoRefresh(false); } } catch (err: unknown) { setError(err instanceof Error ? err.message : 'Ошибка загрузки'); setLoading(false); } } function getStatusText(status: string): string { const statuses: Record = { running: 'Генерация...', completed: 'Готово', failed: 'Ошибка', waiting_for_input: 'Ожидание...', created: 'Создано', }; return statuses[status] || status; } function getStatusClass(status: string): string { return `status-badge status-${status}`; } function formatDuration(seconds: number): string { const mins = Math.floor(seconds / 60); const secs = Math.floor(seconds % 60); return `${mins}:${secs.toString().padStart(2, '0')}`; } function renderFile(file: FileResult, index: number) { const isVideo = file.contentType === 'video'; const previewContent = isVideo ?