'use client'; import { useState } from 'react'; import { useRouter } from 'next/navigation'; import { useTranslations } from 'next-intl'; import { Box, Button, Container, Flex, Heading, HStack, IconButton, Spinner, Tabs, Text, VStack, Badge, } from '@chakra-ui/react'; import { LuArrowLeft, LuPlay, LuFileText, LuSearch, LuUsers, LuBrain, LuChartBar, LuDownload, } from 'react-icons/lu'; import { useGetProject, useGenerateScript, useDeepResearch, useNeuroAnalysis, useYoutubeAudit, projectsService, } from '@/lib/api/skriptai'; // Tab Components import ResearchTab from './tabs/ResearchTab'; import { BriefTab, CharactersTab, ScriptTab, AnalysisTab } from './tabs'; interface ProjectDetailProps { projectId: string; } /** * Project Detail Component * * Full project view with tabbed interface for research, brief, characters, script, and analysis. */ export default function ProjectDetail({ projectId }: ProjectDetailProps) { const t = useTranslations('projectDashboard'); const router = useRouter(); const [activeTab, setActiveTab] = useState('research'); // Queries const { data: project, isLoading, error } = useGetProject(projectId); const generateScript = useGenerateScript(projectId); const deepResearch = useDeepResearch(projectId); const neuroAnalysis = useNeuroAnalysis(projectId); const youtubeAudit = useYoutubeAudit(projectId); // Export to JSON const handleExport = async () => { try { const response = await projectsService.exportToJson(projectId); const data = response.data; const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json', }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = `${project?.topic || 'project'}.json`; a.click(); URL.revokeObjectURL(url); } catch (err) { console.error('Export failed:', err); } }; if (isLoading) { return ( ); } if (error || !project) { return ( {t('projectNotFound')} ); } return ( {/* Header */} router.push('/skriptai')} > {project.topic} {project.contentType} {project.speechStyle?.join(', ')} {project.targetDuration} {project.language?.toUpperCase()} {project.logline && ( {project.logline} )} {/* Tabs */} setActiveTab(e.value)} > {t('research')} {project.sources && ( {project.sources.length} )} {t('brief')} {t('characters')} {t('script')} {project.segments && ( {project.segments.length} )} {t('analysis')} deepResearch.mutate(undefined)} isResearching={deepResearch.isPending} onNext={() => setActiveTab('brief')} /> setActiveTab('characters')} /> setActiveTab('script')} /> generateScript.mutate(undefined)} isGenerating={generateScript.isPending} /> neuroAnalysis.mutate()} onYoutubeAudit={() => youtubeAudit.mutate()} isAnalyzing={neuroAnalysis.isPending || youtubeAudit.isPending} /> ); }