import { defineStore } from 'pinia'
import { ref } from 'vue'
import request from '@/utils/request'

export const usePermissionStore = defineStore('permission', () => {
    // 存储我能看到的页面代码 (如 ['inbound_buy', ...])
    const menuPermissions = ref<string[]>([])

    // 存储我能看到的列代码 (如 ['unit_price', 'sale_price'])
    const elementPermissions = ref<string[]>([])

    // 初始化加载权限 (登录后调用)
    const loadPermissions = async () => {
        try {
            const res: any = await request({
                url: '/v1/auth/my-permissions',
                method: 'get'
            })
            if (res.code === 200 && res.data) {
                menuPermissions.value = res.data.menus || []
                elementPermissions.value = res.data.elements || []
                console.log('权限字典加载完成:', elementPermissions.value.length, '个列权限')
            }
        } catch (e) {
            console.error('加载权限失败', e)
            // 失败时清空，防止残留
            menuPermissions.value = []
            elementPermissions.value = []
        }
    }

    // ★ 核心判断函数：判断当前用户是否拥有某个列/按钮的权限
    // page: 页面代码 (预留字段，目前全局唯一code，暂不使用page隔离)
    // code: 权限标识 (如 'unit_price')
    const hasColumnPermission = (page: string, code: string) => {
        // 1. 如果列没有配置 permissionKey，说明是公开列，直接放行
        if (!code) return true

        // 2. 检查权限池里是否有这个 code
        return elementPermissions.value.includes(code)
    }

    return {
        menuPermissions,
        elementPermissions,
        loadPermissions,
        hasColumnPermission
    }
})