import { create } from 'zustand'; import type { Project, Outline, Character, Chapter } from '../types'; interface AppState { currentProject: Project | null; setCurrentProject: (project: Project | null) => void; projects: Project[]; setProjects: (projects: Project[]) => void; addProject: (project: Project) => void; updateProject: (id: string, project: Partial) => void; removeProject: (id: string) => void; outlines: Outline[]; setOutlines: (outlines: Outline[]) => void; addOutline: (outline: Outline) => void; updateOutline: (id: string, outline: Partial) => void; removeOutline: (id: string) => void; characters: Character[]; setCharacters: (characters: Character[]) => void; addCharacter: (character: Character) => void; updateCharacter: (id: string, character: Partial) => void; removeCharacter: (id: string) => void; chapters: Chapter[]; setChapters: (chapters: Chapter[]) => void; addChapter: (chapter: Chapter) => void; updateChapter: (id: string, chapter: Partial) => void; removeChapter: (id: string) => void; currentChapter: Chapter | null; setCurrentChapter: (chapter: Chapter | null) => void; loading: boolean; setLoading: (loading: boolean) => void; lastUpdated: { projects?: number; outlines?: number; characters?: number; chapters?: number; }; markUpdated: (key: 'projects' | 'outlines' | 'characters' | 'chapters') => void; clearProjectData: () => void; } export const useStore = create((set) => ({ currentProject: null, setCurrentProject: (project) => set({ currentProject: project }), projects: [], setProjects: (projects) => set({ projects }), addProject: (project) => set((state) => ({ projects: [...state.projects, project] })), updateProject: (id, updatedProject) => set((state) => ({ projects: state.projects.map((p) => p.id === id ? { ...p, ...updatedProject } : p ), currentProject: state.currentProject?.id === id ? { ...state.currentProject, ...updatedProject } : state.currentProject, })), removeProject: (id) => set((state) => ({ projects: state.projects.filter((p) => p.id !== id), currentProject: state.currentProject?.id === id ? null : state.currentProject, })), outlines: [], setOutlines: (outlines) => set({ outlines }), addOutline: (outline) => set((state) => ({ outlines: [...state.outlines, outline] })), updateOutline: (id, updatedOutline) => set((state) => ({ outlines: state.outlines.map((o) => o.id === id ? { ...o, ...updatedOutline } : o ), })), removeOutline: (id) => set((state) => ({ outlines: state.outlines.filter((o) => o.id !== id), })), characters: [], setCharacters: (characters) => set({ characters }), addCharacter: (character) => set((state) => ({ characters: [...state.characters, character] })), updateCharacter: (id, updatedCharacter) => set((state) => ({ characters: state.characters.map((c) => c.id === id ? { ...c, ...updatedCharacter } : c ), })), removeCharacter: (id) => set((state) => ({ characters: state.characters.filter((c) => c.id !== id), })), chapters: [], setChapters: (chapters) => set({ chapters }), addChapter: (chapter) => set((state) => ({ chapters: [...state.chapters, chapter] })), updateChapter: (id, updatedChapter) => set((state) => ({ chapters: state.chapters.map((c) => c.id === id ? { ...c, ...updatedChapter } : c ), currentChapter: state.currentChapter?.id === id ? { ...state.currentChapter, ...updatedChapter } : state.currentChapter, })), removeChapter: (id) => set((state) => ({ chapters: state.chapters.filter((c) => c.id !== id), currentChapter: state.currentChapter?.id === id ? null : state.currentChapter, })), currentChapter: null, setCurrentChapter: (chapter) => set({ currentChapter: chapter }), loading: false, setLoading: (loading) => set({ loading }), lastUpdated: {}, markUpdated: (key) => set((state) => ({ lastUpdated: { ...state.lastUpdated, [key]: Date.now(), }, })), clearProjectData: () => set({ outlines: [], characters: [], chapters: [], currentChapter: null, }), }));