'use client'

import { createContext, useContext, useState, useCallback, useMemo } from 'react'

interface NoteRefreshContextType {
  refreshKey: number
  triggerRefresh: () => void
  notebooksRefreshKey: number
  triggerNotebooksRefresh: () => void
}

const NoteRefreshContext = createContext<NoteRefreshContextType | undefined>(undefined)

export function NoteRefreshProvider({ children }: { children: React.ReactNode }) {
  const [refreshKey, setRefreshKey] = useState(0)
  const [notebooksRefreshKey, setNotebooksRefreshKey] = useState(0)

  const triggerRefresh = useCallback(() => {
    setRefreshKey(prev => prev + 1)
  }, [])

  const triggerNotebooksRefresh = useCallback(() => {
    setNotebooksRefreshKey(prev => prev + 1)
  }, [])

  const value = useMemo(() => ({ refreshKey, triggerRefresh, notebooksRefreshKey, triggerNotebooksRefresh }), [refreshKey, triggerRefresh, notebooksRefreshKey, triggerNotebooksRefresh])

  return (
    <NoteRefreshContext.Provider value={value}>
      {children}
    </NoteRefreshContext.Provider>
  )
}

export function useNoteRefresh() {
  const context = useContext(NoteRefreshContext)
  if (!context) {
    throw new Error('useNoteRefresh must be used within NoteRefreshProvider')
  }
  return context
}

export function useNoteRefreshOptional(): NoteRefreshContextType {
  const context = useContext(NoteRefreshContext)
  return context ?? { refreshKey: 0, triggerRefresh: () => {}, notebooksRefreshKey: 0, triggerNotebooksRefresh: () => {} }
}
