// cron-jobs.js
const { logActivity } = require('./database');

/**
 * Проверяет задачи с типом document_approval, у которых указан номер документа,
 * и автоматически переводит всех их исполнителей в статус completed.
 * Задача остаётся открытой (closed_at не заполняется).
 * @param {Object} db - экземпляр базы данных SQLite
 */
function checkDocumentsForCompletion(db) {
    console.log('🔄 [CRON] Проверка задач документов для автоматического завершения исполнителей...');
    
    // Находим активные задачи типа document, у которых есть номер документа
    // и которые ещё не закрыты (closed_at IS NULL) – можно оставить для страховки
    const query = `
        SELECT id, title, document_n
        FROM tasks
        WHERE task_type = 'document'
          AND status = 'active'
          AND closed_at IS NULL
          AND document_n IS NOT NULL
          AND document_n != ''
    `;
    
    db.all(query, [], (err, tasks) => {
        if (err) {
            console.error('❌ [CRON] Ошибка при поиске задач документов:', err);
            return;
        }
        
        if (!tasks || tasks.length === 0) {
            console.log('ℹ️ [CRON] Нет задач документов, требующих завершения исполнителей.');
            return;
        }
        
        console.log(`🔍 [CRON] Найдено ${tasks.length} задач документов с номером.`);
        
        tasks.forEach(task => {
            // Для каждой задачи находим всех исполнителей, у которых статус не 'completed'
            const assignmentQuery = `
                SELECT id, user_id, status
                FROM task_assignments
                WHERE task_id = ? AND status != 'completed'
            `;
            
            db.all(assignmentQuery, [task.id], (err, assignments) => {
                if (err) {
                    console.error(`❌ [CRON] Ошибка при получении исполнителей задачи ${task.id}:`, err);
                    return;
                }
                
                if (!assignments || assignments.length === 0) {
                    console.log(`ℹ️ [CRON] Задача ${task.id} (${task.title}) уже имеет всех исполнителей со статусом completed.`);
                    return;
                }
                
                console.log(`📋 [CRON] Задача ${task.id}: нужно завершить ${assignments.length} исполнителей.`);
                
                // Обновляем статус каждого исполнителя на 'completed'
                assignments.forEach(assignment => {
                    db.run(
                        `UPDATE task_assignments SET status = 'completed', updated_at = CURRENT_TIMESTAMP WHERE id = ?`,
                        [assignment.id],
                        function(err) {
                            if (err) {
                                console.error(`❌ [CRON] Ошибка обновления назначения ${assignment.id}:`, err);
                            } else {
                                console.log(`✅ [CRON] Исполнитель ${assignment.user_id} задачи ${task.id} завершён автоматически.`);
                                
                                // Логируем действие
                                try {
                                    logActivity(
                                        task.id,
                                        0, // системное действие, user_id = null
                                        'AUTO_COMPLETED',
                                        `Автоматически завершено после указания номера документа`
                                    );
                                } catch (logErr) {
                                    console.error('❌ [CRON] Ошибка логирования:', logErr);
                                }
                            }
                        }
                    );
                });
            });
        });
    });
}

module.exports = {
    checkDocumentsForCompletion
};