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

/**
 * 전체 사용자 목록 조회
 */
const getAllUsers = async (req, res) => {
    try {
        const users = await User.findAll({
            attributes: { 
                exclude: ['password'] 
            },
            order: [['createdAt', 'DESC']]
        });
        res.json(users);
    } catch (error) {
        console.error('사용자 목록 조회 중 오류 발생:', error);
        res.status(500).json({ message: '사용자 목록을 가져오는 중 오류가 발생했습니다.' });
    }
};

/**
 * 단일 사용자 정보 조회
 */
const getUser = async (req, res) => {
    try {
        const userId = req.params.id;
        const user = await User.findByPk(userId, {
            attributes: { exclude: ['password'] }
        });

        if (!user) {
            return res.status(404).json({ message: '사용자를 찾을 수 없습니다.' });
        }

        res.json(user);
    } catch (error) {
        console.error('사용자 정보 조회 중 오류 발생:', error);
        res.status(500).json({ message: '사용자 정보를 가져오는 중 오류가 발생했습니다.' });
    }
};

/**
 * 사용자 정보 수정
 */
const updateUser = async (req, res) => {
    try {
        const userId = req.params.id;
        const { name, email, role, status } = req.body;

        const user = await User.findByPk(userId);
        if (!user) {
            return res.status(404).json({ message: '사용자를 찾을 수 없습니다.' });
        }

        // 이메일 중복 확인 (이메일이 변경된 경우에만)
        if (email !== user.email) {
            const existingUser = await User.findOne({ where: { email } });
            if (existingUser) {
                return res.status(400).json({ message: '이미 사용 중인 이메일입니다.' });
            }
        }

        // 필수 필드 확인
        if (!name || !email || !role || !status) {
            return res.status(400).json({ message: '필수 정보가 누락되었습니다.' });
        }

        await user.update({ 
            name, 
            email, 
            role, 
            status,
            updatedAt: new Date()
        });
        
        const updatedUser = await User.findByPk(userId, {
            attributes: { exclude: ['password'] }
        });
        
        res.json(updatedUser);
    } catch (error) {
        console.error('사용자 정보 수정 중 오류 발생:', error);
        res.status(500).json({ message: '사용자 정보를 수정하는 중 오류가 발생했습니다.' });
    }
};

module.exports = {
    getAllUsers,
    getUser,
    updateUser
};
