/**
 * Script d'initialisation des abonnements
 * Crée des offres et promotions globales (pas par école)
 */

module.exports = async function () {
    sails.log.info('🚀 Initialisation des abonnements...');

    try {
        // 1. Créer les offres d'abonnement globales
        const offres = [
            {
                nom: 'Essai Gratuit',
                description: 'Accès gratuit pendant 7 jours pour tester l\'application',
                typeAbonnement: 'essai',
                dureeJours: 7,
                montant: 0,
                devise: 'XOF',
                fonctionnalites: [
                    'Suivi des notes',
                    'Communication avec les enseignants',
                    'Notifications de base',
                    'Accès au calendrier scolaire'
                ],
                ordreAffichage: 1,
                couleur: '#28a745',
                icone: 'fa-gift',
                actif: true
            },
            {
                nom: 'Abonnement Mensuel',
                description: 'Accès complet à toutes les fonctionnalités pendant 1 mois',
                typeAbonnement: 'mensuel',
                dureeJours: 30,
                montant: 700,
                devise: 'XOF',
                fonctionnalites: [
                    'Suivi complet des notes et moyennes',
                    'Communication illimitée avec les enseignants',
                    'Notifications avancées',
                    'Accès au calendrier scolaire',
                    'Historique des paiements',
                    'Support prioritaire',
                    'Rapports détaillés'
                ],
                ordreAffichage: 2,
                couleur: '#007bff',
                icone: 'fa-calendar-alt',
                actif: true
            },
            {
                nom: 'Abonnement Trimestriel',
                description: 'Accès complet pendant 3 mois avec une économie de 10%',
                typeAbonnement: 'trimestriel',
                dureeJours: 90,
                montant: 2000,
                devise: 'XOF',
                fonctionnalites: [
                    'Suivi complet des notes et moyennes',
                    'Communication illimitée avec les enseignants',
                    'Notifications avancées',
                    'Accès au calendrier scolaire',
                    'Historique des paiements',
                    'Support prioritaire',
                    'Rapports détaillés',
                    'Analyses de progression',
                    'Conseils personnalisés'
                ],
                ordreAffichage: 3,
                couleur: '#ffc107',
                icone: 'fa-chart-bar',
                actif: true
            },
            {
                nom: 'Abonnement Semestriel',
                description: 'Accès complet pendant 6 mois avec une économie de 20%',
                typeAbonnement: 'semestriel',
                dureeJours: 180,
                montant: 3500,
                devise: 'XOF',
                fonctionnalites: [
                    'Suivi complet des notes et moyennes',
                    'Communication illimitée avec les enseignants',
                    'Notifications avancées',
                    'Accès au calendrier scolaire',
                    'Historique des paiements',
                    'Support prioritaire',
                    'Rapports détaillés',
                    'Analyses de progression',
                    'Conseils personnalisés',
                    'Accès aux ressources pédagogiques',
                    'Sessions de coaching'
                ],
                ordreAffichage: 4,
                couleur: '#fd7e14',
                icone: 'fa-bullseye',
                actif: true
            },
            {
                nom: 'Abonnement Annuel',
                description: 'Accès complet pendant 1 an avec une économie de 30%',
                typeAbonnement: 'annuel',
                dureeJours: 365,
                montant: 6000,
                devise: 'XOF',
                fonctionnalites: [
                    'Suivi complet des notes et moyennes',
                    'Communication illimitée avec les enseignants',
                    'Notifications avancées',
                    'Accès au calendrier scolaire',
                    'Historique des paiements',
                    'Support prioritaire',
                    'Rapports détaillés',
                    'Analyses de progression',
                    'Conseils personnalisés',
                    'Accès aux ressources pédagogiques',
                    'Sessions de coaching',
                    'Accès premium aux événements',
                    'Consultation personnalisée',
                    'Accès anticipé aux nouvelles fonctionnalités'
                ],
                ordreAffichage: 5,
                couleur: '#dc3545',
                icone: 'fa-crown',
                actif: true
            }
        ];

        // 2. Créer les promotions globales
        const promotions = [
            {
                nom: 'Bienvenue',
                description: 'Code de bienvenue pour les nouveaux utilisateurs',
                typeReduction: 'pourcentage',
                valeurReduction: 10,
                devise: 'XOF',
                dateDebut: new Date(),
                dateFin: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000), // 1 an
                nombreUtilisationsMax: 1000,
                nombreUtilisationsParParent: 1,
                montantMinimum: 5000,
                couleur: '#28a745',
                actif: true
            },
            {
                nom: 'Étudiant',
                description: 'Réduction spéciale pour les familles nombreuses',
                typeReduction: 'montant_fixe',
                valeurReduction: 1000,
                devise: 'XOF',
                dateDebut: new Date(),
                dateFin: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000), // 1 an
                nombreUtilisationsMax: 500,
                nombreUtilisationsParParent: 1,
                montantMinimum: 5000,
                couleur: '#17a2b8',
                actif: true
            }
        ];

        // 3. Créer les offres (upsert par nom)
        for (const offreData of offres) {
            const existingOffre = await OffreAbonnement.findOne({ nom: offreData.nom });

            if (existingOffre) {
                sails.log.info(`✅ Offre existante: ${offreData.nom}`);
            } else {
                const newOffre = await OffreAbonnement.create(offreData).fetch();
                sails.log.info(`🆕 Nouvelle offre créée: ${newOffre.nom} (${newOffre.codeOffre})`);
            }
        }

        // 4. Créer les promotions (upsert par nom)
        for (const promoData of promotions) {
            // Utiliser find().limit(1) au lieu de findOne() pour éviter l'erreur "More than one matching record"
            const existingPromos = await PromotionAbonnement.find({ nom: promoData.nom }).limit(1);
            const existingPromo = existingPromos[0];

            if (existingPromo) {
                sails.log.info(`✅ Promotion existante: ${promoData.nom}`);
            } else {
                const newPromo = await PromotionAbonnement.create(promoData).fetch();
                sails.log.info(`🆕 Nouvelle promotion créée: ${newPromo.nom} (${newPromo.codePromotion})`);
            }
        }

        // 5. Exporter les données pour sauvegarde
        //await exportAbonnementsData();

        sails.log.info('🎉 Initialisation des abonnements terminée avec succès!');

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

/**
 * Exporte les données d'abonnement pour sauvegarde
 */
/*async function exportAbonnementsData() {
    try {
        // Récupérer toutes les offres
        const offres = await OffreAbonnement.find({ actif: true });

        // Récupérer toutes les promotions
        const promotions = await PromotionAbonnement.find({ actif: true });

        // Créer le fichier d'export
        const exportData = {
            timestamp: new Date().toISOString(),
            version: '1.0',
            offres: offres.map(offre => ({
                nom: offre.nom,
                description: offre.description,
                typeAbonnement: offre.typeAbonnement,
                dureeJours: offre.dureeJours,
                montant: offre.montant,
                devise: offre.devise,
                fonctionnalites: offre.fonctionnalites,
                icone: offre.icone
            })),
            promotions: promotions.map(promo => ({
                nom: promo.nom,
                typeReduction: promo.typeReduction,
                valeurReduction: promo.valeurReduction,
                devise: promo.devise,
                dateDebut: promo.dateDebut,
                dateFin: promo.dateFin,
                nombreUtilisationsMax: promo.nombreUtilisationsMax
            }))
        };

        // Écrire le fichier d'export
        const fs = require('fs');
        const path = require('path');
        const exportPath = path.join(__dirname, '..', 'exports', 'abonnements-data.json');

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

        fs.writeFileSync(exportPath, JSON.stringify(exportData, null, 2));
        sails.log.info(`📁 Données exportées vers: ${exportPath}`);

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