import { create } from 'zustand'
import type { ComponentType } from 'react'

/**
 * 状态栏扩展点架构
 *
 * 功能模块通过 register/unregister 注入自己的状态栏组件，
 * StatusBar 只负责按 alignment + priority 排序渲染。
 * 避免 StatusBar 随功能膨胀，实现类似 VS Code contributions 的注册模式。
 *
 * 每个 StatusBarItem 的 Component 是独立的 React 函数组件（无 props），
 * 内部使用 hooks 读取所需 store 状态。组件在 StatusBar 的渲染中挂载，
 * 因此 hooks 调用在合法的 React 组件上下文中。
 */

export interface StatusBarItem {
  id: string
  alignment: 'left' | 'right'
  /** 同侧排序权重，数字越小越靠左（left）或越靠中（right） */
  priority: number
  Component: ComponentType
}

interface StatusBarState {
  /** 以 id 为 key，方便覆盖和删除 */
  items: Record<string, StatusBarItem>
  register: (item: StatusBarItem) => void
  unregister: (id: string) => void
}

export const useStatusBarStore = create<StatusBarState>((set, get) => ({
  items: {},

  register: (item: StatusBarItem) => {
    const { items } = get()
    if (items[item.id]?.Component === item.Component) return
    set({ items: { ...items, [item.id]: item } })
  },

  unregister: (id: string) => {
    const { items } = get()
    if (!(id in items)) return
    const next = { ...items }
    delete next[id]
    set({ items: next })
  }
}))
