import config from '@/config' // 引入配置文件
import {ADMIN} from '@/config/default' // 默认配置
import {formatFullPath} from '@/utils/i18n' // 路由国际化
import {filterMenu} from '@/utils/authority-utils' // 菜单权限过滤
import {getLocalSetting} from '@/utils/themeUtil' // 主题配置
import deepClone from 'lodash.clonedeep' // 深拷贝
// import Cookies from 'js-cookie'
// const Cookie = require('js-cookie')

const localSetting = getLocalSetting(true) // 获取本地主题配置
const customTitlesStr = sessionStorage.getItem(process.env.VUE_APP_TBAS_TITLES_KEY) // 获取本地自定义标题
const customTitles = (customTitlesStr && JSON.parse(customTitlesStr)) || []

export default {
  namespaced: true, // 命名空间
  state: { // 状态 
    theme:undefined, // 主题
    isMobile: false, // 是否是移动端
    animates: ADMIN.animates, // 动画
    palettes: ADMIN.palettes, // 主题
    pageMinHeight: 0, // 页面最小高度
    menuData: [], // 菜单数据
    activatedFirst: undefined, // 激活的第一个菜单
    customTitles, // 自定义标题
    ...config, // 配置文件
    ...localSetting // 本地主题配置
  },
  getters: {
    menuData(state, getters, rootState) { // 菜单数据
      if (state.filterMenu) {
        const {permissions, roles} = rootState.account
        return filterMenu(deepClone(state.menuData), permissions, roles) // 过滤菜单 权限 和 角色
      }
      return state.menuData
    },
    firstMenu(state, getters) {  // 第一个菜单
      const {menuData} = getters // 从getters中获取菜单数据
      if (menuData.length > 0 && !menuData[0].fullPath) { // 如果菜单数据长度大于0 并且 菜单数据第一个元素没有fullPath
        formatFullPath(menuData) // 路由国际化
      }
      return menuData.map(item => { // 返回data map item
        const menuItem = {...item} // 菜单项
        delete menuItem.children // 删除子菜单
        return menuItem // 返回菜单项
      })
    },
    subMenu(state) { // 子菜单
      const {menuData, activatedFirst} = state // 从state中获取菜单数据 和 激活的第一个菜单
      if (menuData.length > 0 && !menuData[0].fullPath) { // 如果菜单数据长度大于0 并且 菜单数据第一个元素没有fullPath
        formatFullPath(menuData) // 路由国际化
      }
      const current = menuData.find(menu => menu.fullPath === activatedFirst) // 当前菜单
      return current && current.children || [] // 返回当前菜单的子菜单
    }
  },
  mutations: {
    setDevice (state, isMobile) { // 设置设备
      state.isMobile = isMobile
    },
    setTheme (state, theme) { // 设置主题
      // if (theme.color){
      //   Cookie.set(process.env.VUE_APP_THEME_COLOR_KEY,theme.color)
      // }
      // if (theme.mode){
      //   Cookie.set(process.env.VUE_APP_THEME_MODE_KEY,theme.mode)
      // }
      state.theme = theme
    },
    setLayout (state, layout) { // 设置布局
      // Cookies.set(process.env.VUE_APP_LAYOUT_KEY,layout) // 设置cookie
      state.layout = layout
    },
    setMultiPage (state, multiPage) { // 设置多页签
      state.multiPage = multiPage
    },
    setAnimate (state, animate) { // 设置动画
      state.animate = animate
    },
    setWeekMode(state, weekMode) { // 设置周模式
      state.weekMode = weekMode
    },
    setFixedHeader(state, fixedHeader) { // 固定头部
      state.fixedHeader = fixedHeader
    },
    setFixedSideBar(state, fixedSideBar) { // 设置固定侧边栏
      state.fixedSideBar = fixedSideBar
    },
    setLang(state, lang) { // 设置语言
      state.lang = lang
    },
    setHideSetting(state, hideSetting) { // 设置隐藏设置
      state.hideSetting = hideSetting
    },
    correctPageMinHeight(state, minHeight) { // 修正页面最小高度
      state.pageMinHeight += minHeight
    },
    setMenuData(state, menuData) {  // 设置菜单数据
      state.menuData = menuData
    },
    setAsyncRoutes(state, asyncRoutes) {  // 设置异步路由
      state.asyncRoutes = asyncRoutes
    },
    setPageWidth(state, pageWidth) { // 设置页面宽度
      state.pageWidth = pageWidth
    },
    setActivatedFirst(state, activatedFirst) { // 设置激活的第一个菜单
      state.activatedFirst = activatedFirst
    },
    setFixedTabs(state, fixedTabs) { // 设置固定标签
      state.fixedTabs = fixedTabs
    },
    setCustomTitle(state, {path, title}) { // 设置自定义标题
      if (title) { // 如果标题存在
        const obj = state.customTitles.find(item => item.path === path) //  获取路径
        if (obj) { // 如果对象存在
          obj.title = title // 标题
        } else { // 否则
          state.customTitles.push({path, title}) // 添加路径和标题
        }
        sessionStorage.setItem(process.env.VUE_APP_TBAS_TITLES_KEY, JSON.stringify(state.customTitles)) // 存储自定义标题
      }
    }
  }
}
