import { useState, useEffect } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import TopBar from './TopBar'; import StatusBar from './StatusBar'; import PanelLayout from './PanelLayout'; import { useFileStore } from '@/stores/fileStore'; import { useEditorStore } from '@/stores/editorStore'; import { useEnvStore, Environment } from '@/stores/envStore'; export default function IDEShell() { const { env } = useParams<{ env: string }>(); const navigate = useNavigate(); const [layout, setLayout] = useState<'editor' | 'split' | 'preview'>('split'); const initialize = useFileStore((s) => s.initialize); const initialized = useFileStore((s) => s.initialized); const files = useFileStore((s) => s.files); const createFile = useFileStore((s) => s.createFile); const deleteFile = useFileStore((s) => s.deleteFile); const addFile = useEditorStore((s) => s.addFile); const removeFile = useEditorStore((s) => s.removeFile); const openFiles = useEditorStore((s) => s.openFiles); const environment = useEnvStore((s) => s.environment); const setEnvironment = useEnvStore((s) => s.setEnvironment); const [hasAutoOpened, setHasAutoOpened] = useState(false); useEffect(() => { initialize(); }, [initialize]); useEffect(() => { if (env && !['web', 'java', 'python'].includes(env)) { navigate('/ide', { replace: true }); } }, [env, navigate]); useEffect(() => { if (!initialized || !env || !['web', 'java', 'python'].includes(env)) return; const targetEnv = env as Environment; // If URL environment differs from store, clean up and scaffold if (environment !== targetEnv) { setEnvironment(targetEnv); // Cleanup old files Object.keys(files).forEach(f => { if (f === 'README.md') return; const isJava = f.endsWith('.java'); const isPython = f.endsWith('.py'); const isWeb = ['.html', '.css', '.js', '.ts', '.tsx', '.jsx'].some(ext => f.endsWith(ext)); if (targetEnv === 'java' && !isJava) { deleteFile(f); removeFile(f); } if (targetEnv === 'python' && !isPython) { deleteFile(f); removeFile(f); } if (targetEnv === 'web' && !isWeb) { deleteFile(f); removeFile(f); } }); // Scaffold files if (targetEnv === 'web') { const content = `\n\n
\n \n \n