const cron = require('node-cron'); const { sendReminder } = require('../tasks/send_reminder'); const config = require('../config.json'); /** * Convierte el intervalo en horas o minutos a minutos. * @param {String} intervalo - Intervalo en el formato "2 horas" o "45 minutos". * @returns {Number} - Intervalo en minutos. */ const getIntervalInMinutes = (intervalo) => { const [amount, unit] = intervalo.split(' '); return unit.includes('hora') ? parseInt(amount) * 60 : parseInt(amount); }; /** * Programa las tareas de recordatorio basadas en el horario y el intervalo. * @param {Object} client - Instancia del cliente de WhatsApp. */ const initializeCronJobs = (client) => { const dailyRoutines = config.rutinas.diarias; dailyRoutines.forEach((routine) => { const { actividad, detalles } = routine; const { intervalo, horario, que, hora } = detalles; if (intervalo && horario) { const intervalInMinutes = getIntervalInMinutes(intervalo); const [startHour, startMinute] = horario.inicio.split(':').map(Number); const [endHour, endMinute] = horario.fin.split(':').map(Number); cron.schedule(`*/${intervalInMinutes} * * * *`, () => { const now = new Date(); const isWithinTimeFrame = now.getHours() >= startHour && now.getHours() <= endHour && (now.getHours() < endHour || now.getMinutes() <= endMinute); if (isWithinTimeFrame) { sendReminder(client, actividad, que); } }); } else if (hora) { const [hour, minute] = hora.split(':'); cron.schedule(`${minute} ${hour} * * *`, () => { sendReminder(client, actividad, que); }); } }); console.log('⏰ Recordatorios programados según configuración en config.json'); }; module.exports = { initializeCronJobs };