// task-timeout.js
// Хранилище времени последнего создания задачи для каждого пользователя
const lastTaskCreationTime = new Map();

// Middleware для проверки таймаута между созданием задач
const checkTaskCreationTimeout = (req, res, next) => {
    const userId = req.session?.user?.id;
    
    if (!userId) {
        return next();
    }
    
    const now = Date.now();
    const timeoutMs = 15000; // 15 секунд в миллисекундах
    
    if (lastTaskCreationTime.has(userId)) {
        const lastCreation = lastTaskCreationTime.get(userId);
        const timeSinceLastCreation = now - lastCreation;
        
        if (timeSinceLastCreation < timeoutMs) {
            const remainingSeconds = Math.ceil((timeoutMs - timeSinceLastCreation) / 1000);
            return res.status(429).json({ 
                error: `Слишком частое создание задач. Подождите ${remainingSeconds} секунд.`,
                remainingSeconds: remainingSeconds,
                timeout: true
            });
        }
    }
    
    // Помечаем, что проверка пройдена
    req.taskCreationCheckPassed = true;
    next();
};

// Функция для обновления времени создания
const updateLastTaskCreationTime = (userId) => {
    if (userId) {
        lastTaskCreationTime.set(userId, Date.now());
        console.log(`✅ Время создания задачи обновлено для пользователя ${userId}`);
    }
};

// Очистка старых записей (раз в час)
setInterval(() => {
    const oneHourAgo = Date.now() - 3600000;
    let deletedCount = 0;
    for (const [userId, creationTime] of lastTaskCreationTime.entries()) {
        if (creationTime < oneHourAgo) {
            lastTaskCreationTime.delete(userId);
            deletedCount++;
        }
    }
    if (deletedCount > 0) {
        console.log(`🧹 Очищено ${deletedCount} устаревших записей времени создания задач`);
    }
}, 3600000); // Каждый час

module.exports = {
    checkTaskCreationTimeout,
    updateLastTaskCreationTime
};