/**
 * Script d'export des données d'abonnement
 * Permet d'exporter les offres et promotions pour sauvegarde
 */

module.exports = async function () {
    sails.log.info('📤 Export des données d\'abonnement...');

    try {
        // Récupérer toutes les offres actives
        const offres = await OffreAbonnement.find({ actif: true }).sort('nom ASC');
        sails.log.info(`📊 ${offres.length} offres trouvées`);

        // Récupérer toutes les promotions actives
        const promotions = await PromotionAbonnement.find({ actif: true }).sort('nom ASC');
        sails.log.info(`🎁 ${promotions.length} promotions trouvées`);

        // Créer le fichier d'export
        const exportData = {
            metadata: {
                timestamp: new Date().toISOString(),
                version: '1.0',
                totalOffres: offres.length,
                totalPromotions: promotions.length,
                environment: process.env.NODE_ENV || 'development'
            },
            offres: offres.map(offre => ({
                codeOffre: offre.codeOffre,
                nom: offre.nom,
                description: offre.description,
                typeAbonnement: offre.typeAbonnement,
                dureeJours: offre.dureeJours,
                montant: offre.montant,
                devise: offre.devise,
                fonctionnalites: offre.fonctionnalites,
                icone: offre.icone,
                ordreAffichage: offre.ordreAffichage,
                couleur: offre.couleur,
                actif: offre.actif,
                createdAt: offre.createdAt,
                updatedAt: offre.updatedAt
            })),
            promotions: promotions.map(promo => ({
                codePromotion: promo.codePromotion,
                nom: promo.nom,
                description: promo.description,
                typeReduction: promo.typeReduction,
                valeurReduction: promo.valeurReduction,
                devise: promo.devise,
                dateDebut: promo.dateDebut,
                dateFin: promo.dateFin,
                nombreUtilisationsMax: promo.nombreUtilisationsMax,
                nombreUtilisationsActuelles: promo.nombreUtilisationsActuelles,
                nombreUtilisationsParParent: promo.nombreUtilisationsParParent,
                montantMinimum: promo.montantMinimum,
                couleur: promo.couleur,
                actif: promo.actif,
                createdAt: promo.createdAt,
                updatedAt: promo.updatedAt
            }))
        };

        // Écrire le fichier d'export
        const fs = require('fs');
        const path = require('path');

        // Créer le dossier exports s'il n'existe pas
        const exportDir = path.join(__dirname, '..', 'exports');
        if (!fs.existsSync(exportDir)) {
            fs.mkdirSync(exportDir, { recursive: true });
        }

        // Nom du fichier avec timestamp
        const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
        const exportPath = path.join(exportDir, `abonnements-export-${timestamp}.json`);

        fs.writeFileSync(exportPath, JSON.stringify(exportData, null, 2));

        sails.log.info(`✅ Export terminé avec succès!`);
        sails.log.info(`📁 Fichier créé: ${exportPath}`);
        sails.log.info(`📊 Résumé:`);
        sails.log.info(`   - Offres: ${offres.length}`);
        sails.log.info(`   - Promotions: ${promotions.length}`);
        sails.log.info(`   - Taille: ${(fs.statSync(exportPath).size / 1024).toFixed(2)} KB`);

        // Afficher un aperçu des données exportées
        console.log('\n📋 Aperçu des données exportées:');
        console.log('='.repeat(50));

        console.log('\n🏷️  Offres:');
        offres.forEach(offre => {
            console.log(`   • ${offre.nom} (${offre.typeAbonnement}) - ${offre.montant} ${offre.devise}`);
        });

        console.log('\n🎁 Promotions:');
        promotions.forEach(promo => {
            console.log(`   • ${promo.nom} - ${promo.valeurReduction}${promo.typeReduction === 'pourcentage' ? '%' : ' ' + promo.devise}`);
        });

        return exportData;

    } catch (error) {
        sails.log.error('❌ Erreur lors de l\'export:', error);
        throw error;
    }
};

