const Asset = require('../models/Asset');
const fs = require('fs');
const path = require('path');

// Cấu hình Quota cho từng nhóm người dùng (đơn vị: Bytes)
const ROLE_QUOTAS = {
    'Thành viên': 2 * 1024 * 1024 * 1024,   // 2GB
    'editor': 10 * 1024 * 1024 * 1024,      // 10GB
    'admin': 100 * 1024 * 1024 * 1024,      // 100GB (hoặc Infinity)
    'Chủ sở hữu': Infinity                   // Không giới hạn
};

/**
 * Middleware kiểm tra giới hạn lưu trữ của người dùng
 */
const checkQuota = async (req, res, next) => {
    if (!req.user) return res.status(401).json({ message: 'Unauthorized' });

    const userRole = req.user.role || 'Thành viên';
    const quota = ROLE_QUOTAS[userRole] || ROLE_QUOTAS['Thành viên'];

    // Nếu không giới hạn thì đi tiếp
    if (quota === Infinity) return next();

    try {
        // Sử dụng MongoDB Aggregation để tính tổng dung lượng ngay trên database
        const usageResult = await Asset.aggregate([
            { $match: { uploadedBy: req.user._id } },
            { 
                $group: { 
                    _id: null, 
                    totalUsage: { $sum: { $ifNull: ["$fileSize", 0] } } 
                } 
            }
        ]);

        const currentUsage = usageResult.length > 0 ? usageResult[0].totalUsage : 0;

        const newFileSize = req.file ? req.file.size : 0;

        if (currentUsage + newFileSize > quota) {
            // Xóa file tạm vừa upload lên nếu vượt định mức
            if (req.file && fs.existsSync(req.file.path)) fs.unlinkSync(req.file.path);
            
            return res.status(403).json({ 
                message: `Vượt quá giới hạn lưu trữ. Định mức của bạn là ${(quota / (1024**3)).toFixed(1)}GB. Bạn đã sử dụng ${(currentUsage / (1024**3)).toFixed(2)}GB.` 
            });
        }

        next();
    } catch (error) {
        console.error('[Quota Check Error]:', error);
        next(); // Cho phép đi tiếp nếu lỗi logic kiểm tra để tránh chặn người dùng oan
    }
};

module.exports = { checkQuota, ROLE_QUOTAS };