import { defineStore } from 'pinia'
import router from '@/router'

// 定义名为 'common' 的 Pinia Store
export const useCommonStore = defineStore('common', {
  // 状态 (state) - 存储应用的数据
  state: () => ({
    // 页面文档可视高度(随窗口改变大小)
    documentClientHeight: 0,
    // 侧边栏布局皮肤, light(浅色) / dark(黑色)
    sidebarLayoutSkin: 'dark',
    // 侧边栏折叠状态
    sidebarFold: true,
    // 侧边栏菜单列表
    menuList: [],
    // 当前激活的菜单名称
    menuActiveName: '',
    // 主入口标签页列表
    mainTabs: [],
    // 当前激活的主入口标签页名称
    mainTabsActiveName: '',
    // 当前选择的标签链（用于面包屑导航）
    selectMenu: [],
    // 路由列表
    routeList: [],
    // 菜单项 ID 列表
    menuIds: [],
    // 当前选中的左侧菜单 ID
    selectLeftId: '',
    // 当前选中的右侧菜单 ID
    selectRightId: ''
  }),

  // 动作 (actions) - 包含更改状态的逻辑
  actions: {
    // 更新页面文档可视高度
    updateDocumentClientHeight(height) {
      this.documentClientHeight = height;
    },

    // 更新侧边栏折叠状态
    updateSidebarFold(fold) {
      this.sidebarFold = fold;
    },

    // 更新侧边栏菜单列表
    updateMenuList(list) {
      this.menuList = list;
    },

    // 更新当前激活的菜单名称
    updateMenuActiveName(name) {
      this.menuActiveName = name;
    },

    // 更新主入口标签页列表
    updateMainTabs(tabs) {
      this.mainTabs = tabs;
    },

    // 更新当前激活的主入口标签页名称
    updateMainTabsActiveName(name) {
      this.mainTabsActiveName = name;
    },

    // 更新路由列表
    updateRouteList(list) {
      this.routeList = list;
    },

    // 更新当前选择的标签链（用于面包屑导航）
    updateSelectMenu(list) {
      this.selectMenu = list;
    },

    // 更新当前选中的左侧菜单 ID
    updateSelectLeftId(id) {
      this.selectLeftId = id;
    },

    // 更新当前选中的右侧菜单 ID
    updateSelectRightId(id) {
      this.selectRightId = id;
    },

    // 替换当前选择的标签链的最后一项
    replaceSelectMenu(title) {
      this.selectMenu.splice(this.selectMenu.length - 1, 1, title);
    },

    // 更新菜单项 ID 列表，确保所有 ID 是字符串形式
    updateMenuIds(list) {
      this.menuIds = [];
      list.forEach(menu => {
        this.menuIds.push(String(menu.menuId + ''));
      });
    },

    // 移除当前激活的主入口标签页，并处理相关逻辑
    removeMainActiveTab() {
      // 过滤掉当前激活的标签页
      this.mainTabs = this.mainTabs.filter(item => item.name !== this.mainTabsActiveName);

      if (this.mainTabs.length >= 1) {
        // 如果还有其他标签页，则切换到最后一个标签页
        router.push({ name: this.mainTabs[this.mainTabs.length - 1].name }, () => {
          this.mainTabsActiveName = this.mainTabs[this.mainTabs.length - 1].name;
        });
      } else {
        // 如果没有其他标签页，则重置菜单激活名称并跳转到主页
        this.menuActiveName = '';
        router.push({ name: 'home' });
      }
    }
  }
});
