import { defineStore } from 'pinia'
import { ref } from 'vue'
import type { RouteRecordRaw } from 'vue-router'
import type { MenuItem } from '@/types/menu'
import { mockGetRoutes } from '@/mock'
import { flattenMenuToRoutes } from '@/utils/routeHelper'

export const usePermissionStore = defineStore('permission', () => {
  /** 用于 Sidebar 渲染的嵌套菜单数据（保持原始层级结构） */
  const menuList = ref<MenuItem[]>([])

  /** 标记：动态路由是否已加载完毕 */
  const isRoutesLoaded = ref(false)

  /**
   * 核心函数：
   * 1. 从 Mock/后端拉取当前用户有权限的路由
   * 2. 更新 menuList（供 Sidebar 使用）
   * 3. 返回扁平化的路由配置（由路由守卫负责注册到 router）
   */
  async function generateRoutes(token: string): Promise<RouteRecordRaw[]> {
    const res = await mockGetRoutes(token)
    const rawMenuData: MenuItem[] = res.data

    // 保留嵌套结构给 Sidebar 使用
    menuList.value = rawMenuData

    // 转换为扁平路由，返回给调用方（路由守卫）注册
    const flatRoutes = flattenMenuToRoutes(rawMenuData)

    isRoutesLoaded.value = true
    return flatRoutes
  }

  /** 登出时重置（配合页面刷新使用） */
  function reset() {
    menuList.value = []
    isRoutesLoaded.value = false
  }

  return { menuList, isRoutesLoaded, generateRoutes, reset }
})
