import { ProjectFile } from '@/types/project' import { useDialogState } from '@/hooks/use-dialog-state' import { useFileFilters } from '@/hooks/use-file-filters' import { useCodeExplanation } from '@/hooks/use-code-explanation' import { useAIOperations } from '@/hooks/use-ai-operations' import { EditorToolbar } from '@/components/molecules/EditorToolbar' import { MonacoEditorPanel } from '@/components/molecules/MonacoEditorPanel' import { EmptyEditorState } from '@/components/molecules/EmptyEditorState' import { CodeExplanationDialog } from '@/components/molecules/CodeExplanationDialog' interface CodeEditorProps { files: ProjectFile[] activeFileId: string | null onFileChange: (fileId: string, content: string) => void onFileSelect: (fileId: string) => void onFileClose: (fileId: string) => void } export function CodeEditor({ files, activeFileId, onFileChange, onFileSelect, onFileClose, }: CodeEditorProps) { const { isOpen: showExplainDialog, setIsOpen: setShowExplainDialog } = useDialogState() const { explanation, isExplaining, explain } = useCodeExplanation() const { improveCode } = useAIOperations() const { getOpenFiles, findFileById } = useFileFilters(files) const activeFile = findFileById(activeFileId) || undefined const openFiles = getOpenFiles(activeFileId) const handleImproveCode = async () => { if (!activeFile) return const instruction = prompt('How would you like to improve this code?') if (!instruction) return const improvedCode = await improveCode(activeFile.content, instruction) if (improvedCode) { onFileChange(activeFile.id, improvedCode) } } const handleExplainCode = async () => { if (!activeFile) return setShowExplainDialog(true) await explain(activeFile.content) } return (
{openFiles.length > 0 ? ( <>
{activeFile && ( onFileChange(activeFile.id, content)} /> )}
) : ( )}
) }