/**
 * Editor Store
 * 编辑器状态管理 (Zustand)
 */

import { create } from 'zustand';
import type { EditorStore, HeadingItem, WordCount, LinkEditorData, SlashMenuItem } from '../core/types';
import type { EditorView } from 'prosemirror-view';
import type { Schema } from 'prosemirror-model';

const initialState = {
  // 编辑器实例
  view: null as EditorView | null,
  schema: null as Schema | null,

  // UI 状态
  isSlashMenuOpen: false,
  slashMenuPosition: null as { top: number; left: number } | null,
  slashMenuQuery: '',
  slashMenuItems: [] as SlashMenuItem[],

  isLinkEditorOpen: false,
  linkEditorPosition: null as { top: number; left: number } | null,
  linkEditorData: null as LinkEditorData | null,

  isFloatingToolbarVisible: false,
  floatingToolbarPosition: null as { top: number; left: number } | null,

  // 编辑器状态
  isFocused: false,
  isReadOnly: false,
  wordCount: { characters: 0, words: 0, paragraphs: 0 } as WordCount,
  headings: [] as HeadingItem[],
};

export const useEditorStore = create<EditorStore>((set) => ({
  ...initialState,

  // 编辑器实例管理
  setView: (view) => set({ view }),
  setSchema: (schema) => set({ schema }),

  // 斜杠菜单
  openSlashMenu: (position, query = '') =>
    set({
      isSlashMenuOpen: true,
      slashMenuPosition: position,
      slashMenuQuery: query,
    }),
  closeSlashMenu: () =>
    set({
      isSlashMenuOpen: false,
      slashMenuPosition: null,
      slashMenuQuery: '',
    }),
  setSlashMenuQuery: (query) => set({ slashMenuQuery: query }),
  setSlashMenuItems: (items) => set({ slashMenuItems: items }),

  // 链接编辑器
  openLinkEditor: (position, data) =>
    set({
      isLinkEditorOpen: true,
      linkEditorPosition: position,
      linkEditorData: data || null,
    }),
  closeLinkEditor: () =>
    set({
      isLinkEditorOpen: false,
      linkEditorPosition: null,
      linkEditorData: null,
    }),
  setLinkEditorData: (data) => set({ linkEditorData: data }),

  // 浮动工具栏
  showFloatingToolbar: (position) =>
    set({
      isFloatingToolbarVisible: true,
      floatingToolbarPosition: position,
    }),
  hideFloatingToolbar: () =>
    set({
      isFloatingToolbarVisible: false,
      floatingToolbarPosition: null,
    }),

  // 编辑器状态
  setFocused: (focused) => set({ isFocused: focused }),
  setReadOnly: (readOnly) => set({ isReadOnly: readOnly }),
  updateWordCount: (count) => set({ wordCount: count }),
  updateHeadings: (headings) => set({ headings }),

  // 重置
  reset: () => set(initialState),
}));
