import { create } from 'zustand'
import { persist, createJSONStorage } from 'zustand/middleware'
import { Descendant } from 'slate'

interface Document {
  id: string
  name: string
  content: Descendant[]
  createdAt: string
  updatedAt: string
}

interface DocumentStore {
  currentDocument: Document | null
  isDocumentPanelOpen: boolean
  toggleDocumentPanel: () => void
  setDocumentPanelOpen: (open: boolean) => void
  getCurrentDocument: () => Document
  setCurrentDocument: (document: Document) => void
  updateCurrentDocumentContent: (content: Descendant[]) => void
}

const createEmptyDocument = (name = 'Untitled Document'): Document => ({
  id: `doc-${Date.now()}`,
  name,
  content: [
    {
      type: 'paragraph',
      children: [{ text: '' }],
    } as any,
  ],
  createdAt: new Date().toISOString(),
  updatedAt: new Date().toISOString(),
})

export const useDocumentStore = create<DocumentStore>()(
  persist(
    (set, get) => ({
      currentDocument: createEmptyDocument(),
      isDocumentPanelOpen: false,
      
      getCurrentDocument: () => {
        const current = get().currentDocument
        return current || createEmptyDocument()
      },
      
      setCurrentDocument: (document: Document) => {
        set({ currentDocument: document })
      },
      
      updateCurrentDocumentContent: (content: Descendant[]) => {
        const current = get().currentDocument
        if (current) {
          set({ 
            currentDocument: {
              ...current,
              content,
              updatedAt: new Date().toISOString()
            }
          })
        }
      },
      
      toggleDocumentPanel: () => {
        set((state) => ({ isDocumentPanelOpen: !state.isDocumentPanelOpen }))
      },
      
      setDocumentPanelOpen: (open: boolean) => {
        set({ isDocumentPanelOpen: open })
      },
    }),
    {
      name: 'document-storage',
      storage: createJSONStorage(() => localStorage),
    }
  )
)