const templates = require('../../config/email/login-reminder');
const updateTemplates = require('../../config/email/update-reminder'); // Nouveau template

module.exports = {
  friendlyName: 'Process hourly reminders',

  fn: async function() {
    const currentHour = new Date().getHours();
    const notifications = await PendingNotification.find({
      where: {
        status: 'pending',
        scheduledDate: {
          '<=': new Date(),
          '>=': new Date(new Date().setHours(currentHour, 0, 0, 0))
        }
      },
      limit: 20,
      sort: 'scheduledDate ASC'
    }).populate('user');

    for (const notif of notifications) {
      try {
        const baseUrl = sails.config.externalApis.baseUrl;
        
        // CAS SPÉCIFIQUE POUR LES RAPPELS DE MISE À JOUR
        if (notif.type === 'update_reminder') {
          if (notif.channel === 'email' && notif.user.email) {
            const { subject, html } = updateTemplates.emailUpdateReminder(notif.user, baseUrl);
            await sails.helpers.sendMailjetEmail.with({
              to: notif.user.email,
              subject,
              html,
              nameDestinataire: notif.user.nom
            });
          }
          else if (notif.channel === 'whatsapp' && notif.user.telephone1) {
            const { text } = updateTemplates.whatsappUpdateReminder(notif.user, baseUrl);
            await sails.helpers.sendWhatsappMessage.with({
              to: notif.user.telephone1,
              text
            });
          }

          // Marquer l'utilisateur comme notifié
          await Utilisateurs.updateOne({id: notif.user.id})
            .set({ lastUpdateReminderSentAt: new Date() });
        }
        // CAS ORIGINAL POUR LES AUTRES NOTIFICATIONS
        else {
          if (notif.channel === 'email' && notif.user.email) {
            const { subject, html, nameDestinataire } = templates.emailTemplate(notif.user, baseUrl);
            await sails.helpers.sendMailjetEmail.with({
              to: notif.user.email,
              subject,
              html,
              nameDestinataire
            });
          }
          else if (notif.channel === 'whatsapp' && notif.user.telephone1) {
            const { text } = templates.whatsappTemplate(notif.user, baseUrl);
            await sails.helpers.sendWhatsappMessage.with({
              to: notif.user.telephone1,
              text
            });
          }

          await Utilisateurs.updateOne({id: notif.user.id})
            .set({ lastReminderSentAt: new Date() });
        }

        // Mettre à jour la notification dans tous les cas
        await PendingNotification.updateOne({id: notif.id})
          .set({ status: 'sent' });

      } catch (err) {
        await PendingNotification.updateOne({id: notif.id})
          .set({ status: 'failed' });

        sails.log.error(`Échec envoi ${notif.channel} à ${notif.user.id}:`, err);
      }
    }
  }
};