import Vue from 'vue'
import VueI18n from 'vue-i18n'
import store from '@/store'

export const getLocale = function() {
	let locale = uni.getStorageSync('locale')
	if (!locale) {
		locale = uni.getLocale()
		if (locale.indexOf('zh') === 0) {
			return 'zh-cn'
		} else {
			return 'en-us'
		}
	}
	return locale || 'zh-cn'
}

export function setLocale(locale) {
  if (VueI18n.instance && VueI18n.instance.locale === locale) {
    return
  }
  if (VueI18n.instance) {
    VueI18n.instance.locale = locale
  }
  // if (locale !== 'zh-cn') {
  //   const r = getAppLocale({ 'app_id': 'starify-ui', 'locale': locale.replace('-', '_') })
  //   if (r.ret === 0) {
  //     let messages = VueI18n.instance.getLocaleMessage(locale)
  //     messages = Object.assign(messages, r.data)
  //     VueI18n.instance.setLocaleMessage(locale, messages)
  //   }
  // }
	const messages = VueI18n.instance.getLocaleMessage(locale)
	VueI18n.instance.setLocaleMessage(locale, messages)
  store.commit('SET_LOCALE', locale)
	uni.setLocale(locale)
  uni.setStorageSync('locale', locale)
}

function loadLocaleMessages() {
  const locales = require.context('./lang', true, /[A-Za-z0-9-_,\s]+\.js$/i)
  const messages = { 'zh-cn': {}}
  locales.keys().forEach((key) => {
      const matched = key.match(/\/module\/([A-Za-z0-9-_]+)\/([^.]*)\./i)
      if (matched && matched.length > 1) {
        const locale = matched[1]
				const module = matched[2]
				if (!messages[locale]) {
					messages[locale] = {}
				}
        messages[locale][module] = locales(key)['default']
      }
  })
  return messages
}

export function initLocale() {
  if (!VueI18n.locateInit) {
    VueI18n.locateInit = true
    const locale = getLocale()
    setLocale(locale)
  }
}

if (!VueI18n.instance) {
  Vue.use(VueI18n)
	const i18n = new VueI18n({
		locale: 'zh-cn',
		fallbackLocale: 'zh-cn',
		messages: loadLocaleMessages(),
		silentFallbackWarn: true
	})
	VueI18n.instance = i18n
	i18n.$t = Vue.prototype.$t = (key, text, values) => {
		let t = i18n.t(key, values)
		if (t) {
			t = t.toString()
		}
		return t || text
	}
	i18n.$tc = Vue.prototype.$tc = (key, text, values) => {
		let t = i18n.t(key, values)
		if (t) {
			t = t.toString()
		}
		return t || text
	}
}
export default VueI18n.instance