const jwt = require('jsonwebtoken');
const User = require('../models/User');

// JWT配置
const JWT_SECRET = process.env.JWT_SECRET || 'your-secret-key-change-in-production';

module.exports = async (req, res, next) => {
  // 获取token
  const token = req.header('Authorization')?.replace('Bearer ', '');
  
  if (!token) {
    return res.status(401).json({ 
      code: 401, 
      message: '未提供认证令牌' 
    });
  }

  try {
    // 支持开发环境的模拟token
    if (token.startsWith('mock-jwt-token-')) {
      // 模拟用户数据，避免数据库查询
      req.user = {
        id: 1,
        username: 'admin',
        role: 'admin'
      };
      next();
      return;
    }

    // 验证token
    const decoded = jwt.verify(token, JWT_SECRET);
    
    // 使用Sequelize模型检查用户是否存在
    const user = await User.findOne({
      where: {
        id: decoded.id,
        status: 'active'
      },
      attributes: ['id', 'username', 'role']
    });
    
    if (!user) {
      return res.status(401).json({ 
        code: 401, 
        message: '用户不存在或已被删除' 
      });
    }

    // 将用户信息添加到请求对象
    req.user = user;
    next();
  } catch (err) {
    console.error(err);
    return res.status(401).json({ 
      code: 401, 
      message: '无效的认证令牌' 
    });
  }
};