import React, { useEffect, useState, useCallback } from "react"; import { Box, Stack, Typography, Alert, Paper, LinearProgress, CircularProgress, alpha, Collapse, IconButton, Divider } from "@mui/material"; import { EditNote as EditNoteIcon, CheckCircle as CheckCircleIcon, PlayArrow as PlayArrowIcon, ArrowBack as ArrowBackIcon, Info as InfoIcon, ExpandMore as ExpandMoreIcon, ExpandLess as ExpandLessIcon, Download as DownloadIcon, Refresh as RefreshIcon } from "@mui/icons-material"; import { Script, Knobs, Scene } from "../types"; import { BlogResearchResponse } from "../../../services/blogWriterApi"; import { podcastApi } from "../../../services/podcastApi"; import { GlassyCard, PrimaryButton, SecondaryButton } from "../ui"; import { SceneEditor } from "./SceneEditor"; import { InlineAudioPlayer } from "../InlineAudioPlayer"; import { aiApiClient } from "../../../api/client"; interface ScriptEditorProps { projectId: string; idea: string; research: any; // Research type rawResearch: BlogResearchResponse | null; knobs: Knobs; speakers: number; durationMinutes: number; script: Script | null; onScriptChange: (script: Script) => void; onBackToResearch: () => void; onProceedToRendering: (script: Script) => void; onError: (message: string) => void; avatarUrl?: string | null; // Base avatar URL for consistent scene image generation analysis?: any; outline?: any; } export const ScriptEditor: React.FC = ({ projectId, idea, research, rawResearch, knobs, speakers, durationMinutes, script: initialScript, onScriptChange, onBackToResearch, onProceedToRendering, onError, avatarUrl, analysis, outline, }) => { const [script, setScript] = useState