// Element
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
// flex 布局库
import 'flex.css'
// 组件
import '@/components'
// svg 图标
import '@/assets/svg-icons'
// JSON 树形视图
import vueJsonTreeView from 'vue-json-tree-view'
// 国际化
import i18n from '@/i18n.js'

import store from '@/store'

// 功能插件
import pluginError from '@/plugin/error'
import pluginLog from '@/plugin/log'
import pluginOpen from '@/plugin/open'

export default {
  async install (Vue, options) {
    // 设置为 false 以阻止 vue 在启动时生成生产提示
    // https://cn.vuejs.org/v2/api/#productionTip
    Vue.config.productionTip = false
    // 当前环境
    Vue.prototype.$env = process.env.NODE_ENV
    // 当前的 baseUrl
    Vue.prototype.$baseUrl = process.env.BASE_URL
    // 当前版本
    Vue.prototype.$version = process.env.VUE_APP_VERSION
    // 构建时间
    Vue.prototype.$buildTime = process.env.VUE_APP_BUILD_TIME

    // 权限检查方法
    Vue.prototype.$permission = (value, type = 'menu') => {
      let path = ''
      const auth = store.state.d2admin.menu.authKey

      switch (type) {
        case 'menu':
          path = value
          break
        case 'router':
          path = value.name.replace(/-/g, '/')
          path.slice(0, 1) !== '/' && (path = '/' + path)
          break
      }

      return !!(path && Object.prototype.hasOwnProperty.call(auth, path))
    }

    // Element
    Vue.use(ElementUI, {
      i18n: (key, value) => i18n.t(key, value)
    })
    // 插件
    Vue.use(pluginError)
    Vue.use(pluginLog)
    Vue.use(pluginOpen)
    // JSON 树形视图组件（tree-view）
    Vue.use(vueJsonTreeView)
  }
}
