/**
 * 权限检查 Composable
 * 用于在模板或脚本中检查用户权限
 */

import { computed } from 'vue'
import { useUserStore } from '@/store/modules/user'

export function usePermission() {
  const userStore = useUserStore()

  // 权限列表
  const permissions = computed(() => userStore.permissions)

  // 按钮权限列表
  const buttons = computed(() => userStore.buttons)

  // 是否是超级管理员
  const isSuperAdmin = computed(() => userStore.isSuperAdmin)

  /**
   * 检查是否有指定权限
   * @param permission 权限码
   * @returns 是否有权限
   */
  const hasPermission = (permission: string): boolean => {
    return userStore.hasPermission(permission)
  }

  /**
   * 检查是否有任意一个权限
   * @param perms 权限码数组
   * @returns 是否有权限
   */
  const hasAnyPermission = (perms: string[]): boolean => {
    return userStore.hasAnyPermission(perms)
  }

  /**
   * 检查是否有所有权限
   * @param perms 权限码数组
   * @returns 是否有权限
   */
  const hasAllPermissions = (perms: string[]): boolean => {
    return userStore.hasAllPermissions(perms)
  }

  /**
   * 检查是否有菜单权限
   * @param menuCode 菜单码
   * @returns 是否有权限
   */
  const hasMenuPermission = (menuCode: string): boolean => {
    return hasPermission(`menu:${menuCode}`)
  }

  /**
   * 检查是否有按钮权限（从 permissions 数组检查）
   * @param buttonCode 按钮码
   * @returns 是否有权限
   */
  const hasButtonPermission = (buttonCode: string): boolean => {
    return hasPermission(buttonCode)
  }

  /**
   * 检查是否有按钮权限（从 buttons 数组检查）
   * @param buttonCode 按钮权限码
   * @returns 是否有权限
   */
  const hasButton = (buttonCode: string): boolean => {
    return userStore.hasButton(buttonCode)
  }

  return {
    permissions,
    buttons,
    isSuperAdmin,
    hasPermission,
    hasAnyPermission,
    hasAllPermissions,
    hasMenuPermission,
    hasButtonPermission,
    hasButton
  }
}
