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

    fn: async function () {
        // Vérifier les notifications existantes pour éviter les doublons
        const existingNotifications = await PendingNotification.find({
            type: 'update_reminder',
            status: 'pending'
        });

        if (existingNotifications.length > 0) {
            return sails.log.info('Des notifications sont déjà en attente. Aucune nouvelle création.');
        }

        // 1. Trouver les utilisateurs non mis à jour
        const users = await Utilisateurs.find({
            isUpdate: false,
            lastLoginAt: { '<': new Date(Date.now() - 30 * 24 * 60 * 60 * 1000) }, // Pas connectés depuis 30 jours
            or: [
                { email: { '!=': '' } },    // Soit email non vide
                { telephone1: { '!=': '' } } // Soit téléphone non vide
            ]
        });

        sails.log.info(`Found ${users.length} users needing update reminders`);

        // 2. Créer des notifications en liste d'attente
        const now = new Date();
        const dailyLimit = 300; // Limite d'envois par jour
        let notificationsCreated = 0;

        for (let i = 0; i < Math.min(users.length, dailyLimit); i++) {
            const user = users[i];
            const sendDate = new Date(now);
            sendDate.setMinutes(now.getMinutes() + (i * 1)); // Toutes les 1 minutes pour les tests
            //sendDate.setHours(now.getHours() + Math.floor(i / 10)); // Répartir sur les heures suivantes

            // Vérification supplémentaire (au cas où)
            if (!user.email && !user.telephone1) {
                sails.log.warn(`User ${user.id} has no contact info, skipping`);
                continue;
            }

            // Déterminer le canal de communication
            let channel;
            if (user.email) {
                channel = 'email';
            } else if (user.telephone1) {
                channel = 'whatsapp';
            } else {
                continue; // Double vérification
            }

            await PendingNotification.create({
                user: user.id,
                channel: channel, //user.email ? 'email' : 'whatsapp',
                scheduledDate: sendDate,
                type: 'update_reminder',
                status: 'pending'
            });
            notificationsCreated++;
            sails.log.info(`Created reminder for user ${user.id} scheduled for ${sendDate}`);
        }

        // 3. Marquer seulement les utilisateurs avec notifications créées
        if (notificationsCreated > 0) {
            await Utilisateurs.update({ id: _.pluck(users.slice(0, notificationsCreated), 'id') })
                .set({ isUpdatePending: true });
            sails.log.info(`Marked ${notificationsCreated} users as pending update`);
        } else {
            sails.log.info('No valid users found for reminders');
        }
        /*/ 3. Marquer les utilisateurs comme "en cours de rappel"
        await Utilisateurs.update({ id: _.pluck(users, 'id') })
            .set({ isUpdatePending: true });*/
    }
};
