<?php

namespace App\Http\Middleware;

use App\Models\User;
use App\Models\UserSession;
use Closure;
use Illuminate\Http\Request;

class CheckToken
{
    /**
     * 处理传入请求
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {
        // 1. 从请求头获取 token（header 名称：token / Token 都支持）
        $token = $request->header('authorization');

        // 2. 如果请求头没有 token，直接返回未授权
        if (empty($token)) {
            return response()->json([
                'code' => 401,
                'msg' => lang('请携带token访问')
            ], 401);
        }

        // 3. 查询 user_session：token 存在 + 未过期
        $session = UserSession::where('token', $token)
            ->where('expire_time', '>', now()) // 过期时间 > 当前时间 = 未过期
            ->first();

        // 4. 会话不存在或已过期
        if (!$session) {
            return response()->json([
                'code' => 401,
                'msg' => lang('token无效或已过期')
            ], 401);
        }

        // 5. 查询对应用户信息
        $user = User::where('user_id',$session->user_id)->first();

        // 6. 用户不存在
        if (!$user) {
            return response()->json([
                'code' => 401,
                'msg' => lang('用户不存在')
            ], 401);
        }

        // 7. 把用户信息赋值给 $request->user
        $request->user = $user;

        // 8. 放行请求，进入控制器
        return $next($request);
    }
}