import { Request, Response, NextFunction } from "express";
import jwt from "jsonwebtoken";

// 定义一个 JWT 签名密钥
const JWT_SECRET = "Fwcyfyl123."; // ⚠ 生产环境请使用环境变量

// 扩展 Express Request 接口，添加 user 属性
declare global {
  namespace Express {
    interface Request {
      user?: { id: string; username: string };
    }
  }
}

/**
 * JWT 认证中间件
 * 验证请求头中的 JWT Token
 */
export const authMiddleware = (req: Request, res: Response, next: NextFunction) => {
  // 从请求头中获取 Token
  const authHeader = req.headers.authorization;
  if (!authHeader || !authHeader.startsWith("Bearer ")) {
    return res.status(401).json({ message: "Authorization token not found or invalid format." });
  }

  const token = authHeader.split(" ")[1];

  try {
    // 验证 Token 并解码
    const decodedToken = jwt.verify(token, JWT_SECRET) as { id: string; username: string };
    // 将解码后的用户信息附加到请求对象上
    req.user = decodedToken;
    next(); // 继续处理请求
  } catch (error) {
    // Token 验证失败
    return res.status(401).json({ message: "Invalid or expired token." });
  }
};
