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 {
        console.log('收到登录请求:', req.body);
        const { username, password } = req.body;
        
        if (!username || !password) {
            console.log('缺少用户名或密码');
            return res.status(400).json({ message: '请提供用户名和密码' });
        }

        const user = await User.findByUsername(username);
        console.log('查询到的用户:', user ? '找到用户' : '未找到用户');

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

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

        if (isMatch) {
            console.log('登录成功,生成token');
            const token = generateToken(user.id);
            // console.log('生成的token:', token);
            res.json({
                _id: user.id,
                username: user.username,
                role: user.role,
                token: token
            });
        } else {
            console.log('密码错误');
            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: '服务器错误' });
    }
};

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

// @desc    更新用户信息
// @route   PUT /api/users/:id
// @access  Private
const updateUser = async (req, res) => {
    try {
        const { contact, remark } = req.body;
        const userId = req.params.id;

        // 检查用户是否存在
        const user = await User.findById(userId);
        if (!user) {
            return res.status(404).json({ message: '用户不存在' });
        }

        // 更新用户信息
        await User.update(userId, {
            contact,
            remark
        });

        res.json({
            success: true,
            message: '用户信息更新成功'
        });
    } catch (error) {
        console.error('更新用户信息失败:', error);
        res.status(500).json({ 
            success: false,
            message: '服务器错误'
        });
    }
};

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