import React, { useState, useEffect } from 'react';
import { Heart, Camera, Film, Scissors } from 'lucide-react';
import { motion } from 'framer-motion';
import Scriptwriter from './scriptwriter';
import StoryboardArtist from './storyboard-artist';
import VisualDirector from './visual-director';
import Editor from './editor';
import { scriptwriterData, storyboardData, productionData, editorData } from './mock-data';
interface Stage {
id: string;
title: string;
icon: React.ElementType;
color: string;
profession: string;
}
const stages: Stage[] = [
{
id: 'script',
title: 'Scriptwriter',
icon: Heart,
color: '#8b5cf6',
profession: 'Scriptwriter'
},
{
id: 'storyboard',
title: 'Storyboard artist',
icon: Camera,
color: '#06b6d4',
profession: 'Storyboard artist'
},
{
id: 'production',
title: 'Visual director',
icon: Film,
color: '#10b981',
profession: 'Visual director'
},
{
id: 'editing',
title: 'Editor',
icon: Scissors,
color: '#f59e0b',
profession: 'Editor'
}
];
const actionsText = [
'is thinking...',
'is drawing...',
'is directing...',
'is editing...'
]
// 思考指示器组件
const ThinkingDots = ({ show, text, color }: { show: boolean; text: string; color: string }) => {
if (!show) return null;
return (
{[0, 1, 2].map((i) => (
))}
{text}
);
};
interface WorkOfficeProps {
initialStage?: number;
roles: any[];
}
const WorkOffice: React.FC = ({ initialStage = 0 }) => {
const [currentStage, setCurrentStage] = useState(initialStage);
const [isPlaying, setIsPlaying] = useState(false);
const [currentContent, setCurrentContent] = useState>(scriptwriterData);
const [thinkingText, setThinkingText] = useState(`${stages[0].profession} ${actionsText[0]}`);
useEffect(() => {
// currentStage 更新 重新渲染当前工作台组件
setCurrentStage(initialStage);
}, [initialStage]);
// 根据当前阶段加载对应数据
useEffect(() => {
let data: Record = {};
switch (currentStage) {
case 0:
data = scriptwriterData;
break;
case 1:
data = storyboardData;
break;
case 2:
data = productionData;
break;
case 3:
data = editorData;
break;
}
setIsPlaying(true);
setCurrentContent(data);
setThinkingText(`${stages[currentStage].profession} ${actionsText[currentStage]}`);
}, [currentStage]);
// 渲染当前工作台组件
const renderCurrentWorkstation = () => {
switch (currentStage) {
case 0:
return ;
case 1:
return ;
case 2:
return ;
case 3:
return ;
default:
return null;
}
};
return (
{/* 正在加载的部分 文字显示 */}
{/* 工作台内容区域 */}
{renderCurrentWorkstation()}
);
};
export default WorkOffice;