<?php

/**
 * 文件功能：用户等级权限验证中间件
 * 支持传入固定数字等级 或 'super' 关键字（动态读取 sysparam 的 superlevel）
 *
 * @author   ChatRoom Laravel
 *
 * @version  1.0.0
 */

namespace App\Http\Middleware;

use App\Models\Sysparam;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Symfony\Component\HttpFoundation\Response;

class LevelRequired
{
    /**
     * 校验当前登录用户的等级是否大于或等于要求等级。
     * 当 $level 为 'super' 时，动态从 sysparam 表读取 superlevel 值。
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
     * @param  string  $level  要求的最低等级（数字 或 'super'）
     */
    public function handle(Request $request, Closure $next, string $level = 'super'): Response
    {
        if (! Auth::check()) {
            return redirect()->route('home');
        }

        // 动态解析等级要求：'super' → 从 sysparam 读取，数字 → 直接使用
        $requiredLevel = ($level === 'super')
            ? (int) Sysparam::getValue('superlevel', '100')
            : (int) $level;

        $user = Auth::user();

        if ($user->user_level < $requiredLevel) {
            if ($request->expectsJson()) {
                return response()->json(['message' => '权限不足', 'status' => 'error'], 403);
            }

            abort(403, '权限不足，无法执行此操作。');
        }

        return $next($request);
    }
}
