import { defineStore } from "pinia";
import { AuthState } from "@/stores/interface";
import { getAuthButtonListApi, getAuthMenuListApi } from "@/api/modules/login";
import {
  getFlatMenuList,
  getShowMenuList,
  getAllBreadcrumbList,
} from "@/utils";
import { AUTH_STORE_KEY } from "@/stores/constant";

export const useAuthStore = defineStore({
  id: AUTH_STORE_KEY,
  state: (): AuthState => ({
    // 按钮权限列表
    authButtonList: {},
    // 菜单权限列表
    authMenuList: [],
    // 当前页面的 router name，用来做按钮权限筛选
    routeName: "",
    //登录不显示菜单栏和导航栏，点击进入测试的时候显示
    showMenuFlag: JSON.parse(localStorage.getItem("showMenuFlag")),
  }),
  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),
    //是否显示菜单和导航栏
    showMenuFlagGet: (state) => state.showMenuFlag,
  },
  actions: {
    // Get AuthButtonList
    async getAuthButtonList() {
      const { data } = await getAuthButtonListApi();
      this.authButtonList = data;
    },
    // Get AuthMenuList
    async getAuthMenuList() {
      const { data } = await getAuthMenuListApi();
      this.authMenuList = data;
    },
    // Set RouteName
    async setRouteName(name: string) {
      this.routeName = name;
    },
    //重置权限
    async resetAuthStore() {
      this.showMenuFlag=false;
      localStorage.removeItem("showMenuFlag");
    },
    //修改判断菜单栏/导航栏显示条件
    async setShowMenu() {
        this.showMenuFlag = true;
        localStorage.setItem("showMenuFlag", true);
    },
    //更改模式
    async changeModel(){
      this.showMenuFlag=!this.showMenuFlag;
      if(this.showMenuFlag){
        localStorage.setItem("showMenuFlag", true);
      }else{
        localStorage.removeItem("showMenuFlag");
      }
    }
  },
});
