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

// 生成 JWT token
const generateToken = (id) => {
    return jwt.sign({ id }, process.env.JWT_SECRET || 'your-secret-key', {
        expiresIn: '30d'
    });
};

// @desc    用户登录
// @route   POST /api/users/login
// @access  Public
const loginUser = async (req, res) => {
    try {
        const { username, password } = req.body;
        
        if (!username || !password) {
            return res.status(400).json({ message: '请提供用户名和密码' });
        }

        const user = await User.findByUsername(username);
        console.log('查询到的用户:', user); // 调试日志

        if (!user) {
            return res.status(401).json({ message: '用户名或密码错误' });
        }

        const isMatch = await User.comparePassword(password, user.password);
        console.log('密码匹配结果:', isMatch); // 调试日志

        if (isMatch) {
            res.json({
                _id: user.id,
                username: user.username,
                role: user.role,
                token: generateToken(user.id)
            });
        } else {
            res.status(401).json({ message: '用户名或密码错误' });
        }
    } catch (error) {
        console.error('登录错误:', error); // 详细错误日志
        res.status(500).json({ 
            message: '服务器错误',
            error: process.env.NODE_ENV === 'development' ? error.message : undefined
        });
    }
};

// @desc    修改密码
// @route   PUT /api/users/password
// @access  Private
const updatePassword = async (req, res) => {
    try {
        const { currentPassword, newPassword } = req.body;
        const user = await User.findById(req.user.id);

        if (await User.comparePassword(currentPassword, user.password)) {
            await User.updatePassword(user.id, newPassword);
            res.json({ message: '密码修改成功' });
        } else {
            res.status(401).json({ message: '当前密码错误' });
        }
    } catch (error) {
        res.status(500).json({ message: '服务器错误' });
    }
};

// @desc    获取用户信息
// @route   GET /api/users/profile
// @access  Private
const getUserProfile = async (req, res) => {
    try {
        const user = await User.findById(req.user.id);
        if (user) {
            res.json({
                _id: user.id,
                username: user.username,
                role: user.role
            });
        } else {
            res.status(404).json({ message: '用户不存在' });
        }
    } catch (error) {
        res.status(500).json({ message: '服务器错误' });
    }
};

module.exports = {
    loginUser,
    updatePassword,
    getUserProfile
};