<?php

namespace XZD\AI\V5\Core;

/**
 * 用户角色统一检测 — 唯一真相来源
 *
 * 所有需要判断用户角色的地方均调用此方法，保证逻辑一致：
 *   - 管理员: current_user_can('manage_options')（兼容自定义角色）
 *   - VIP: Zibll 原生函数 + 通用 user_meta 降级
 *   - 普通用户 / 游客
 */
class UserHelper
{
    /**
     * 获取用户角色标识
     *
     * @return string 'guest' | 'user' | 'vip' | 'admin'
     */
    public static function getRole(int $userId): string
    {
        if (!$userId) {
            return 'guest';
        }

        $user = get_userdata($userId);
        if (!$user) {
            return 'guest';
        }

        // 管理员检测 — 使用 user_can 而非 current_user_can
        // current_user_can 检查当前登录用户，CLI/cron 中无登录用户会误判
        if (user_can($userId, 'manage_options')) {
            return 'admin';
        }

        // VIP 检测（通过适配器统一入口）
        $adapter = \XZD\AI\V5\Theme\AdapterRegistry::getCurrent();
        $vipLevel = $adapter->getVipLevel($userId);
        if ($vipLevel > 0) {
            return 'vip';
        }

        return 'user';
    }

    /**
     * 角色层级权重
     */
    public static function getRoleLevel(string $role): int
    {
        return match ($role) {
            'admin' => 3,
            'vip'   => 2,
            'user'  => 1,
            default => 0, // guest
        };
    }
}
