import { defineStore } from 'pinia'
import { ref, computed } from 'vue'
import { useStorage } from '@vueuse/core'
// 导入 Element Plus 中英文语言包
import zhCn from 'element-plus/es/locale/lang/zh-cn'
import en from 'element-plus/es/locale/lang/en'
import i18n from '@/locales'

// 默认语言从环境变量获取
const DEFAULT_LANG = import.meta.env.VITE_APP_LANG || 'zh-cn'

export const useAppStore = defineStore('app', () => {
  // 侧边栏状态
  const sidebarOpened = ref(true)
  const loading = ref(false)

  // 语言：开发环境使用 ref（每次启动用环境变量），生产环境使用 useStorage（持久化用户选择）
  const language = import.meta.env.DEV ? ref(DEFAULT_LANG) : useStorage('language', DEFAULT_LANG)
  const size = ref<'default' | 'small' | 'large'>('default')

  /**
   * 根据语言标识读取对应的 Element Plus 语言包
   */
  const locale = computed(() => {
    if (language?.value === 'zh-cn') {
      return zhCn
    }
    return en
  })

  function toggleSidebar() {
    sidebarOpened.value = !sidebarOpened.value
  }

  function setLoading(value: boolean) {
    loading.value = value
  }

  /**
   * 切换语言
   */
  function changeLanguage(val: string) {
    language.value = val
    i18n.global.locale.value = val
  }

  /**
   * 设置组件尺寸
   */
  function setSize(val: 'default' | 'small' | 'large') {
    size.value = val
  }

  return {
    sidebarOpened,
    loading,
    language,
    locale,
    size,
    toggleSidebar,
    setLoading,
    changeLanguage,
    setSize
  }
})
