/**
 * Enregistrement du token FCM après connexion
 * Permet à l'app mobile d'enregistrer ou mettre à jour son token FCM
 */

module.exports = {
    friendlyName: 'Register FCM Token',
    description: 'Register or update FCM token for push notifications',

    inputs: {
        fcmToken: {
            type: 'string',
            required: true
        },
        deviceId: {
            type: 'string',
            required: true
        },
        platform: {
            type: 'string',
            isIn: ['android', 'ios'],
            required: true
        },
        appVersion: {
            type: 'string',
            allowNull: true
        },
        lang: {
            type: 'string',
            allowNull: true
        }
    },

    exits: {
        success: {},
        unauthorized: {
            description: 'User not authenticated'
        },
        invalidInput: {
            description: 'Invalid input data'
        },
        serverError: {
            description: 'Server error occurred'
        }
    },

    fn: async function ({ fcmToken, deviceId, platform, appVersion, lang }, exits) {
        try {
            // Vérifier que l'utilisateur est authentifié
            if (!this.req.user || !this.req.user.codeUser) {
                return exits.unauthorized({
                    success: false,
                    message: 'Utilisateur non authentifié',
                    code: 'UNAUTHORIZED'
                });
            }

            const user = this.req.user;

            // Validation des entrées
            if (!fcmToken || !deviceId || !platform) {
                return exits.invalidInput({
                    success: false,
                    message: 'Token FCM, ID appareil et plateforme sont requis',
                    code: 'MISSING_FIELDS'
                });
            }

            // Enregistrer ou mettre à jour le token FCM
            const result = await sails.helpers.upsertFcmToken.with({
                codeUser: user.codeUser,
                deviceId: deviceId,
                platform: platform,
                fcmToken: fcmToken,
                codeEcole: user.codeEcole,
                appVersion: appVersion || '1.0.0',
                lang: lang || 'fr'
            });

            sails.log.info(`FCM token ${result.action} for user ${user.codeUser} on ${platform}`);

            return exits.success({
                success: true,
                message: 'Token FCM enregistré avec succès',
                data: {
                    codeUser: user.codeUser,
                    deviceId: deviceId,
                    platform: platform,
                    registeredAt: new Date().toISOString()
                }
            });

        } catch (error) {
            sails.log.error('FCM token registration error:', error);
            return exits.serverError({
                success: false,
                message: 'Erreur lors de l\'enregistrement du token FCM',
                code: 'SERVER_ERROR',
                details: error.message
            });
        }
    }
};
