const { pool } = require('../config/database');
const bcrypt = require('bcryptjs');

// 创建用户表
const createUserTable = async () => {
    try {
        await pool.query(`
            CREATE TABLE IF NOT EXISTS users (
                id INT AUTO_INCREMENT PRIMARY KEY,
                username VARCHAR(50) NOT NULL UNIQUE,
                password VARCHAR(255) NOT NULL,
                role ENUM('admin', 'user') DEFAULT 'user',
                created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
            )
        `);
        console.log('用户表创建/检查成功');
    } catch (error) {
        console.error('创建用户表失败:', error);
        throw error;
    }
};

// 初始化表
createUserTable().catch(error => {
    console.error('初始化用户表失败:', error);
});

// 用户相关方法
const User = {
    // 根据用户名查找用户
    findByUsername: async (username) => {
        try {
            console.log('正在查找用户:', username);
            const [rows] = await pool.query(
                'SELECT * FROM users WHERE username = ?',
                [username]
            );
            console.log('查询结果:', rows[0] ? '找到用户' : '未找到用户');
            return rows[0];
        } catch (error) {
            console.error('查找用户失败:', error);
            throw error;
        }
    },

    // 根据ID查找用户
    findById: async (id) => {
        try {
            const [rows] = await pool.query(
                'SELECT * FROM users WHERE id = ?',
                [id]
            );
            return rows[0];
        } catch (error) {
            console.error('根据ID查找用户失败:', error);
            throw error;
        }
    },

    // 创建用户
    create: async (userData) => {
        try {
            const hashedPassword = await bcrypt.hash(userData.password, 10);
            const [result] = await pool.query(
                'INSERT INTO users (username, password, role) VALUES (?, ?, ?)',
                [userData.username, hashedPassword, userData.role || 'user']
            );
            return result.insertId;
        } catch (error) {
            console.error('创建用户失败:', error);
            throw error;
        }
    },

    // 更新用户密码
    updatePassword: async (id, newPassword) => {
        try {
            const hashedPassword = await bcrypt.hash(newPassword, 10);
            await pool.query(
                'UPDATE users SET password = ? WHERE id = ?',
                [hashedPassword, id]
            );
        } catch (error) {
            console.error('更新密码失败:', error);
            throw error;
        }
    },

    // 验证密码
    comparePassword: async (password, hashedPassword) => {
        try {
            if (!password || !hashedPassword) {
                console.error('密码比较失败: 缺少密码或哈希值');
                return false;
            }
            return await bcrypt.compare(password, hashedPassword);
        } catch (error) {
            console.error('密码比较失败:', error);
            throw error;
        }
    },

    // 更新用户信息
    update: async (id, updateData) => {
        try {
            const [result] = await pool.query(
                'UPDATE users SET contact = ?, remark = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?',
                [updateData.contact, updateData.remark, id]
            );
            return result.affectedRows > 0;
        } catch (error) {
            console.error('更新用户信息失败:', error);
            throw error;
        }
    }
};

module.exports = User;