import { create } from 'zustand'; export interface FileTab { id: string; name: string; content: string; } interface EditorState { openTabs: FileTab[]; activeTabId: string | null; files: FileTab[]; openFile: (file: FileTab) => void; closeTab: (id: string) => void; setActiveTab: (id: string) => void; setFiles: (files: FileTab[]) => void; updateFileContent: (id: string, content: string) => void; } export const useEditorStore = create((set: any, get: any) => ({ openTabs: [], activeTabId: null, files: [ { id: '1', name: 'main.lua', content: '-- Main Lua file\nprint("Hello, AeThex!")' }, { id: '2', name: 'utils.lua', content: '-- Utility functions\nfunction greet(name)\n print("Hello, " .. name)\nend' }, ], openFile: (file: FileTab) => { const { openTabs } = get(); if (!openTabs.find((f: FileTab) => f.id === file.id)) { set((state: EditorState) => ({ openTabs: [...state.openTabs, file], activeTabId: file.id, })); } else { set({ activeTabId: file.id }); } }, closeTab: (id: string) => { set((state: EditorState) => { const newTabs = state.openTabs.filter((f: FileTab) => f.id !== id); let newActive = state.activeTabId; if (state.activeTabId === id) { newActive = newTabs.length > 0 ? newTabs[newTabs.length - 1].id : null; } return { openTabs: newTabs, activeTabId: newActive }; }); }, setActiveTab: (id: string) => set({ activeTabId: id }), setFiles: (files: FileTab[]) => set({ files }), updateFileContent: (id: string, content: string) => { set((state: EditorState) => ({ files: state.files.map((f: FileTab) => f.id === id ? { ...f, content } : f), openTabs: state.openTabs.map((f: FileTab) => f.id === id ? { ...f, content } : f), })); }, }));