/*
 * @Author: weisheng
 * @Date: 2024-01-25 23:06:48
 * @LastEditTime: 2024-03-30 11:30:55
 * @LastEditors: weisheng
 * @Description:
 * @FilePath: /wot-design-uni/src/uni_modules/wot-design-uni/locale/index.ts
 * 记得注释
 */
import { reactive, ref } from 'vue'
import zhCN from './lang/zh-CN'
import enUs from './lang/en-US'
import { deepAssign } from '../components/common/util'

type Message = Record<string, any>
type Messages = Record<string, Message>
export const setLangStorage = (lang: string) => {
  uni.setStorageSync('lang', lang)
}
export const getLangStorage = () => {
  return uni.getStorageSync('lang') || 'zh-CN'
}

const lang = ref<string>(getLangStorage())
const messages = reactive<Messages>({
  'zh-CN': zhCN,
  'en-US': enUs,
})

export const Locale = {
  messages(): Message {
    return messages[lang.value]
  },

  use(newLang: string, newMessage?: Message) {
    lang.value = newLang
    if (newMessage) {
      this.add({ [newLang]: newMessage })
    }
    setLangStorage(newLang)
  },

  add(newMessages: Messages = {}) {
    deepAssign(messages, newMessages)
  },
  getLang() {
    return lang.value
  },
}

export const useCurrentLang = () => lang

export default Locale
