import Vue from 'vue';
import store from '@/store';
import VueI18n from 'vue-i18n';
import zhCnLocale from 'element-ui/lib/locale/lang/zh-CN';
import enLocale from 'element-ui/lib/locale/lang/en';
import zhTwLocale from 'element-ui/lib/locale/lang/zh-TW';

import vxeZhCN from 'vxe-table/lib/locale/lang/zh-CN'
import vxEnUS from 'vxe-table/lib/locale/lang/en-US'
import vxeZhHK from 'vxe-table/lib/locale/lang/zh-TW'

import nextZhCn from './lang/zh-CN.js';
import nextEn from './lang/en-US.js';
import nextZhTw from './lang/zh-TW.js';

// 使用插件
Vue.use(VueI18n);

// 定义语言国际化内容
/**
 * 说明：
 * /src/i18n/lang 下的 js 为框架的国际化内容
 * /src/i18n/pages 下的 js 为各界面的国际化内容
 */
const messages = {
  'zh-CN': {
    ...zhCnLocale,
    ...vxeZhCN,
    ...nextZhCn
  },
  'en-US': {
    ...enLocale,
    ...vxEnUS,
    ...nextEn
  },
  'zh-TW': {
    ...zhTwLocale,
    ...vxeZhHK,
    ...nextZhTw
  },
};

/**
 * 模块下全局设置
 * @param files  模块路径
 * @param langType  语言
 * @param langObj  国际化数据对象
 * @param i18n
 */
function setAllLang( files, langType, langObj, i18n ) {
  let path = require('path');
  let partLang = {};
  files.keys().forEach(item => {
    let name = path.basename(item, '.js');
    // console.log("name===", name);
    if ( /^((.*)\/(langs)\/)/.test(item) ) {
      if ( item.indexOf(langType) !== -1 ) {
        let exportDefault = files(item).default || files(item);
        if ( exportDefault ) {
          // 以国际化文件的名称做为key值
          partLang[name] = exportDefault
        }
      }
    }
  });
  Object.keys(partLang).forEach(item => {
    langObj[langType][item] = partLang[item]
  });
}

// 初始化国际化对象
const defaultI18n = new VueI18n({
  locale: store.state.themeConfig.themeConfig.globalI18n,
  fallbackLocale: 'zh-CN',
  messages,
  silentTranslationWarn: true
});
// 模块文件夹的国际化数据对象
const langObj = {
  'en-US': {},
  'zh-CN': {},
  'zh-TW': {}
};

// 新的自动加载
const files = require.context('@', true, /\/langs(.*)\/*\.js$/);
// 初始化加载国际化资源
initI18n(files, defaultI18n);

/**
 * 默认加载国际化资源
 * @param files
 * @param i18n
 * @returns {*}
 */
export function initI18n(files, i18n) {
  setAllLang(files, 'en-US', langObj, i18n); // 英文
  setAllLang(files, 'zh-CN', langObj, i18n); // 中文
  setAllLang(files, 'zh-TW', langObj, i18n); // 中文
  // 将国际化数据挂载到i18n上
  Object.keys(langObj).forEach(key => i18n.mergeLocaleMessage(key, langObj[key]));
  return i18n;
}

// 导出语言国际化
export const i18n = defaultI18n;
