| import { ScanLine, Search, Bot, FileText, LayoutPanelLeft, Clapperboard } from 'lucide-react'; |
| import { useSettingsStore } from '@/lib/store/settings'; |
| import type { |
| SceneOutline, |
| UserRequirements, |
| PdfImage, |
| ImageMapping, |
| } from '@/lib/types/generation'; |
|
|
| |
| export interface GenerationSessionState { |
| sessionId: string; |
| requirements: UserRequirements; |
| pdfText: string; |
| pdfImages?: PdfImage[]; |
| imageStorageIds?: string[]; |
| imageMapping?: ImageMapping; |
| sceneOutlines?: SceneOutline[] | null; |
| currentStep: 'generating' | 'complete'; |
| |
| pdfStorageKey?: string; |
| pdfFileName?: string; |
| pdfProviderId?: string; |
| pdfProviderConfig?: { apiKey?: string; baseUrl?: string }; |
| |
| researchContext?: string; |
| researchSources?: Array<{ title: string; url: string }>; |
| |
| languageDirective?: string; |
| } |
|
|
| export type GenerationStep = { |
| id: string; |
| title: string; |
| description: string; |
| icon: React.ElementType; |
| type: 'analysis' | 'writing' | 'visual'; |
| }; |
|
|
| export const ALL_STEPS: GenerationStep[] = [ |
| { |
| id: 'pdf-analysis', |
| title: 'generation.analyzingPdf', |
| description: 'generation.analyzingPdfDesc', |
| icon: ScanLine, |
| type: 'analysis', |
| }, |
| { |
| id: 'web-search', |
| title: 'generation.webSearching', |
| description: 'generation.webSearchingDesc', |
| icon: Search, |
| type: 'analysis', |
| }, |
| { |
| id: 'outline', |
| title: 'generation.generatingOutlines', |
| description: 'generation.generatingOutlinesDesc', |
| icon: FileText, |
| type: 'writing', |
| }, |
| { |
| id: 'agent-generation', |
| title: 'generation.agentGeneration', |
| description: 'generation.agentGenerationDesc', |
| icon: Bot, |
| type: 'writing', |
| }, |
| { |
| id: 'slide-content', |
| title: 'generation.generatingSlideContent', |
| description: 'generation.generatingSlideContentDesc', |
| icon: LayoutPanelLeft, |
| type: 'visual', |
| }, |
| { |
| id: 'actions', |
| title: 'generation.generatingActions', |
| description: 'generation.generatingActionsDesc', |
| icon: Clapperboard, |
| type: 'visual', |
| }, |
| ]; |
|
|
| export const getActiveSteps = (session: GenerationSessionState | null) => { |
| return ALL_STEPS.filter((step) => { |
| if (step.id === 'pdf-analysis') return !!session?.pdfStorageKey; |
| if (step.id === 'web-search') return !!session?.requirements?.webSearch; |
| if (step.id === 'agent-generation') return useSettingsStore.getState().agentMode === 'auto'; |
| return true; |
| }); |
| }; |
|
|