import {
  getAllProject
} from "@/api/scan/request";
import {
  getUserInfo,getUserInfoByUserId
} from "@/api/system/persagy-sso-server";
import tools from "@/utils/scan/tools"
import storage from '@/framework/utils/storage'
import lStorage from '@/utils/localStorage'
import store from '@/store'

import project from "./project";

const KEY_MENU_SELECTED = 'menu_selected'
const KEY_PROJECT_SELECTED = 'global_project_selected'
const KEY_PAGE_BRANDCRUMB = 'page_brandcrumb'

export default {
  namespaced: true,
  state: {
    sidebarClosed: false,
    sidebarSelected: '', // sidebar选中的选项
    // userInfo: null, //{ username: 'admin' },
    userInfo: {
      userName: 'yanruolan',
      userId: '06328a53c69a41bb8f5bb1a552c6e8d6'
    },
    permissions: {
      "system:role:delete": true,
      "system:role:create": true,
      "system:role:query": true,
      "system:role:setOpts": true
    },
    menus: [], //系统菜单列表
    projectId: '',
    projectName: '',
    group_code: '',
    // projects: project["14"],
    projects: [],
    breadcrumb: [],
    uploaderList: [], //当前上传文件列表
    secret: "", //项目密码
    userId: "", //用户id
    // userId: "06328a53c69a41bb8f5bb1a552c6e8d6", //用户id
    rowEdit: false, //表格数据变化
    errorReport: [], //扫楼错误报告
  },
  getters: {
    sidebarClosed: state => state.sidebarClosed,
    secret: state => state.secret,
    userId: state => state.userId,
    sidebarSelected: state => {
      // if (!state.pageSidebarSelected) {
      //     let menu = storage.get(KEY_MENU_SELECTED)
      //     if (menu) {
      //         state.pageSidebarSelected = menu
      //     }
      // }
      // return state.pageSidebarSelected
      return state.sidebarSelected
    },
    userInfo: state => state.userInfo,
    permissions: state => state.permissions,
    menus: state => state.menus,
    projects: state => state.projects,
    uploaderList: state => state.uploaderList,
    projectId: state => {
      if (!state.projectId) {
        let pid = storage.get(KEY_PROJECT_SELECTED)
        if (pid) {
          state.projectId = pid
        } else if (state.projects && state.projects.length) {
          state.projectId = state.projects[0].id
        }
      }
      return state.projectId
    },
    projectName: state => state.projectName,
    group_code: state => state.group_code,
    breadcrumb: state => {
      if (!state.breadcrumb) {
        let arr = storage.get(KEY_PAGE_BRANDCRUMB)
        if (arr) {
          state.breadcrumb = arr
        }
      }
      return state.breadcrumb
    }
  },
  mutations: {
    setRowEdit: (state, val) => (state.rowEdit = val),
    setErrorReport: (state, val) => (state.errorReport = val),
    setSidebarClosed: (state, val) => (state.sidebarClosed = val),
    setUserInfo: (state, val) => (state.userInfo = val),
    setGroupCode: (state, val) => (state.group_code = val),
    setUserId: (state, val) => (state.userId = val),
    setSidebarSelected: (state, val) => {
      state.sidebarSelected = val
      storage.set(KEY_MENU_SELECTED, val)
      lStorage.set('screen_data', {
        path: val,
        data: {}
      })
    },
    setProjects: (state, val) => (state.projects = val),
    setprojectId: (state, val) => {
      lStorage.remove('cacheInfo') //待删除(删除用户浏览器无用缓存)
      let cacheInfo = lStorage.get('historyInfo') ? lStorage.get('historyInfo') : {}
      state.projectId = val
      lStorage.set('projectId', val)
      if (cacheInfo[state.userInfo.userName]) {
        // cacheInfo[state.userInfo.userName].projectId = val
        cacheInfo[state.userInfo.userName] = [...new Set([val, ...cacheInfo[state.userInfo.userName]])].slice(0, 3)
        lStorage.set('historyInfo', cacheInfo)
      } else {
        cacheInfo[state.userInfo.userName] = [val]
        lStorage.set('historyInfo', cacheInfo)
      }
      storage.set(KEY_PROJECT_SELECTED, val)
      state.projects.map((item) => {
        if (item.id == val) {
          state.secret = item.pwd
          state.projectName = item.name
          state.group_code = item.group_code
          lStorage.set('group_code', item.group_code)
          lStorage.set('secret', item.pwd)
        }
      })
    },
    setMenus: (state, val) => (state.menus = val),
    setUploaderList: (state, val) => {
      state.uploaderList = val ? val : []
    },

  },
  actions: {
    setRowEdit(contentx, value) {
      contentx.commit('setRowEdit', value)
    },
    setErrorReport(contentx, value) {
      contentx.commit('setErrorReport', value)
    },
    /**
     * @info 获取全部项目
     */
    getAllProject({
      state
    }) {
      return new Promise((resolve, reject) => {
        getAllProject({
          pageNumber: 1,
          pageSize: 1000
        }, res => {
          if (res.result === "success" && res.content && res.content.length) {
            state.projects = []
            // if (res.content[0] && res.content[0].id) {
            //     state.projectId = res.content[0].id
            //     state.projectName = res.content[0].localName || res.content[0].name || ""
            //     state.secret = res.content[0].secret || ""
            // }
            res.content.forEach(proj =>
              state.projects.push({
                id: proj.id,
                name: proj.localName || proj.name || "",
                pwd: proj.secret || "",
                group_code: proj.groupCode || ""
              })
            )
            resolve(res)
          } else {
            reject()
          }
        })
      })
    },
    /**
     * 根据登录返回code获取用户信息和项目信息
     */
    loadUserInfo({
      state
    }) {
      return new Promise(async (resolve, reject) => {
        /**
         * 改为调用运维平台的根据用户ID获取用户信息的接口
         * nh 2021.10.25
         */
         let userId = store.state.ssoToken ?
         store.state.ssoToken :
         lStorage.get("ssoToken");

        let pd = lStorage.get("ssoPd");

        var infoData = await getUserInfoByUserId({ userId: userId, pd: pd });
        if (infoData.result === 'success') {
          const data = (infoData.content || [])[0] || {};
          state.userInfo = {
            userName: data.userName,
            userId: data.userId
          };
          state.userId = data.userId;
          state.projects = []; //初始化项目列表
          storage.set('user_name', data.userName);
          storage.set('user_id', data.userId);
          // 获取系统菜单成功
          if (data.authorizations && data.authorizations.length) {
            var menuArr=tools.formatMenu(data.authorizations);
            state.menus = menuArr;
          } else {
            state.menus = [];
          }

          // 获取项目信息成功
          if (data.projects && data.projects.length) {
            // 设置项目列表
            data.projects.forEach(proj =>
              state.projects.push({
                id: proj.projectId,
                name: proj.projectLocalName,
                pwd: proj.secret ? proj.secret : "",
                group_code: proj.groupCode
              })
            )
          }
          resolve(infoData);
        } else {
          state.userInfo = {
            userName: 'yanruolan',
            userId: '06328a53c69a41bb8f5bb1a552c6e8d6'
          };
          resolve(infoData);
        }
         return;


        var infoData = await getUserInfo({});
        if (infoData.code === 'Success') {
          const data = infoData.data;
          state.userInfo = {
            userName: data.name,
            userId: data.id
          };
          state.userId = data.id;
          state.projects = []; //初始化项目列表
          storage.set('user_name', data.username);
          storage.set('user_id', data.id);
          // 获取系统菜单成功
          if (data.menuList && data.menuList.length) {
            state.menus = tools.formatMenu(data.menuList);
          } else {
            state.menus = [];
          }

          // 获取项目信息成功
          if (data.projectList && data.projectList.length) {
            // 设置项目列表
            data.projectList.forEach(proj =>
              state.projects.push({
                id: proj.id,
                name: proj.localName,
                pwd: proj.secret ? proj.secret : "",
                group_code: proj.groupCode
              })
            )
          }
          resolve(infoData);
        } else {
          state.userInfo = {
            userName: 'yanruolan',
            userId: '06328a53c69a41bb8f5bb1a552c6e8d6'
          };
          resolve(infoData);
        }
      })
    },
    setBreadcrumb: {
      root: true,
      handler({
        state,
        commit
      }, val) {
        let label = val[0].label;
        if (label === "消息中心") {
          commit("setSidebarSelected", "message"); // 当进入消息中心页面的时候不选中导航栏
        }
        state.breadcrumb = []
        state.breadcrumb = val
        storage.set(KEY_PAGE_BRANDCRUMB, val)
      }
    }
  }
}
