'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}
/>
);
}