const moment = require('moment');
const { emailTemplates } = require('../../../config/email-templates');

module.exports = {
    friendlyName: 'Forgot password mobile',
    description: 'Envoie un code à 6 chiffres pour réinitialisation du mot de passe mobile',

    inputs: {
        username: {
            type: 'string',
            required: true
        }
    },

    exits: {
        success: {
            description: 'Code envoyé avec succès',
            statusCode: 200
        },
        userNotFound: {
            description: 'Utilisateur non trouvé',
            statusCode: 404
        },
        noContactMethod: {
            description: 'Aucune méthode de contact',
            statusCode: 400
        },
        sendError: {
            description: 'Erreur lors de l\'envoi du code',
            statusCode: 500
        }
    },

    fn: async function ({ username }, exits) {
        console.log('forgot pass', username)
        try {
            // 1. Trouver l'utilisateur
            const user = await Utilisateurs.findOne({
                login: username,
                desactiverCompte: false
            });
            if (!user) {
                return exits.userNotFound('Utilisateur non trouvé');
            }

            // 2. Générer un code à 6 chiffres
            const code = Math.floor(100000 + Math.random() * 900000).toString();
            const expiresAt = moment().add(10, 'minutes').toISOString();

            // 3. Stocker le code et l'expiration
            await Utilisateurs.updateOne({ id: user.id }).set({
                resetToken: code,
                resetTokenExpiresAt: expiresAt
            });

            // 4. Préparer les méthodes de contact
            const phone = user.telephone1 ? `+${user.indicatif1}${user.telephone1}` : null;
            const hasEmail = user.email && user.email.trim() !== '';
            const hasPhone = user.telephone1 && user.telephone1.trim() !== '';
            const appName = 'Corossol'; // À adapter si besoin
            const name = user.nom || user.login || '';

            let sendResults = [];
            if (hasEmail) {
                const emailContent = emailTemplates.passwordResetCode(appName, code, name);
                sendResults.push(
                    sails.helpers.sendMailjetEmail.with({
                        to: user.email,
                        subject: emailContent.subject,
                        html: emailContent.html
                    })
                );
            } else if (hasPhone) {
                const whatsappText = `Bonjour${name ? ' ' + name : ''},\nVotre code de réinitialisation pour ${appName} est : *${code}*\nCe code est valable 10 minutes.`;
                sendResults.push(
                    sails.helpers.sendWhatsappMessage.with({
                        to: phone,
                        text: whatsappText
                    })
                );
                // Optionnel : SMS fallback si WhatsApp échoue ou n'est pas disponible
                // await sails.helpers.sendTwilioSms.with({
                //     to: phone,
                //     body: whatsappText
                // });
            } else {
                return exits.noContactMethod('Aucune méthode de contact enregistrée pour cet utilisateur');
            }
            await Promise.all(sendResults);

            // 5. Log Activity
            const ouestDate = moment.utc(new Date()).utcOffset('+01:00');
            await ActivityLogs.create({
                date: ouestDate.format('YYYY-MM-DD'),
                heure: ouestDate.format('HH:mm:ss'),
                username: user.login,
                action: "FORGOT_PASSWORD_MOBILE",
                status: "success",
                errorMessage: null,
                device: "Mobile"
            });

            return exits.success({
                message: 'Code envoyé avec succès'
            });
        } catch (err) {
            await ActivityLogs.create({
                date: moment().format('YYYY-MM-DD'),
                heure: moment().format('HH:mm:ss'),
                username: username,
                action: "FORGOT_PASSWORD_MOBILE",
                status: "failed",
                errorMessage: (typeof err === 'string' ? err : (err && err.message) || 'Erreur inconnue'),
                device: "Mobile"
            });
            return exits.sendError('Erreur lors de l\'envoi du code');
        }
    }
}; 