import { defineStore } from 'pinia';
import { getShowMenuList, getFlatMenuList, getAllBreadcrumbList, filterMenu } from '@/utils/menu';
import authMenuList from '@/assets/json/authMenuList.json';
import { getMenuTree } from '@/api/menu';
import { useUserStore } from './user';
export const useAuthStore = defineStore({
  id: 'admin-auth',
  state: () => ({
    // 按钮权限列表
    authButtonList: [],
    // 菜单权限列表
    authMenuList: [],
    // 当前页面的 router name，用来做按钮权限筛选
    routeName: '',
  }),
  getters: {
    // 按钮权限列表
    authButtonListGet: (state) => state.authButtonList,
    // 菜单权限列表 ==> 这里的菜单没有经过任何处理
    authMenuListGet: (state) => state.authMenuList,
    // 菜单权限列表 ==> 左侧菜单栏渲染，需要剔除 isHide == true
    showMenuListGet: (state) => getShowMenuList(state.authMenuList),
    // 菜单权限列表 ==> 扁平化之后的一维数组菜单，主要用来添加动态路由
    flatMenuListGet: (state) => getFlatMenuList(state.authMenuList),
    // 递归处理后的所有面包屑导航列表
    breadcrumbListGet: (state) => getAllBreadcrumbList(state.authMenuList),
  },
  actions: {
    // Get AuthButtonList
    async getAuthButtonList() {
      // const { data } = await getAuthButtonListApi();
      const { userInfo } = useUserStore();
      this.authButtonList = userInfo.permissions;
      // this.authButtonList = data;
    },
    // Get AuthMenuList
    async getAuthMenuList() {
      // const { data } = await getAuthMenuListApi();
      const { userInfo } = useUserStore();
      if (userInfo?.menus.length) {
        // 除了按钮的所有菜单
        const userMenus = userInfo.menus.filter((v) => v.type !== '2');
        // 1、获取所有菜单
        const { result } = await getMenuTree();
        // 2、递归菜单
        this.authMenuList = filterMenu(result, userMenus);
      } else {
        this.authMenuList = [];
      }
    },
    // Set RouteName
    async setRouteName(name) {
      this.routeName = name;
    },
  },
});
