/**
 * Script de vérification des abonnements
 * Diagnostique les problèmes et affiche l'état du système
 */

module.exports = async function () {
    sails.log.info('🔍 Vérification du système d\'abonnements...');

    try {
        // 1. Vérifier la connexion à la base de données
        sails.log.info('\n📊 Vérification de la base de données...');

        try {
            await OffreAbonnement.query('SELECT 1');
            sails.log.info('✅ Connexion à la base de données OK');
        } catch (dbError) {
            sails.log.error('❌ Erreur de connexion à la base de données:', dbError.message);
            return { success: false, error: 'DB_CONNECTION_FAILED' };
        }

        // 2. Vérifier les modèles
        sails.log.info('\n🏗️  Vérification des modèles...');

        const modelChecks = [
            { name: 'OffreAbonnement', model: OffreAbonnement },
            { name: 'PromotionAbonnement', model: PromotionAbonnement },
            { name: 'Abonnement', model: Abonnement },
            { name: 'TransactionAbonnement', model: TransactionAbonnement }
        ];

        for (const check of modelChecks) {
            try {
                const count = await check.model.count();
                sails.log.info(`✅ ${check.name}: ${count} enregistrements`);
            } catch (error) {
                sails.log.error(`❌ ${check.name}: Erreur - ${error.message}`);
            }
        }

        // 3. Vérifier les offres existantes
        sails.log.info('\n🏷️  Vérification des offres...');

        try {
            const offres = await OffreAbonnement.find();
            sails.log.info(`📊 Total offres: ${offres.length}`);

            if (offres.length > 0) {
                offres.forEach(offre => {
                    sails.log.info(`   • ${offre.nom} (${offre.typeAbonnement}) - ${offre.montant} ${offre.devise} - ${offre.actif ? '✅ Actif' : '❌ Inactif'}`);
                });
            } else {
                sails.log.warn('⚠️  Aucune offre trouvée');
            }
        } catch (error) {
            sails.log.error('❌ Erreur lors de la récupération des offres:', error.message);
        }

        // 4. Vérifier les promotions existantes
        sails.log.info('\n🎁 Vérification des promotions...');

        try {
            const promotions = await PromotionAbonnement.find();
            sails.log.info(`📊 Total promotions: ${promotions.length}`);

            if (promotions.length > 0) {
                promotions.forEach(promo => {
                    sails.log.info(`   • ${promo.nom} - ${promo.valeurReduction}${promo.typeReduction === 'pourcentage' ? '%' : ' ' + promo.devise} - ${promo.actif ? '✅ Actif' : '❌ Inactif'}`);
                });
            } else {
                sails.log.warn('⚠️  Aucune promotion trouvée');
            }
        } catch (error) {
            sails.log.error('❌ Erreur lors de la récupération des promotions:', error.message);
        }

        // 5. Vérifier les écoles
        sails.log.info('\n🏫 Vérification des écoles...');

        try {
            const ecoles = await Ecoles.find();
            sails.log.info(`📊 Total écoles: ${ecoles.length}`);

            if (ecoles.length > 0) {
                ecoles.slice(0, 5).forEach(ecole => {
                    sails.log.info(`   • ${ecole.codeEcole}: ${ecole.nom}`);
                });
                if (ecoles.length > 5) {
                    sails.log.info(`   ... et ${ecoles.length - 5} autres`);
                }
            } else {
                sails.log.warn('⚠️  Aucune école trouvée');
            }
        } catch (error) {
            sails.log.error('❌ Erreur lors de la récupération des écoles:', error.message);
        }

        // 6. Vérifier la configuration
        sails.log.info('\n⚙️  Vérification de la configuration...');

        try {
            const appContent = sails.config.appContent;
            if (appContent) {
                sails.log.info('✅ Configuration app-content chargée');
                sails.log.info(`   - Écoles configurées: ${Object.keys(appContent.schools || {}).length}`);
                sails.log.info(`   - Configs par école: ${Object.keys(appContent.schoolConfigs || {}).length}`);
            } else {
                sails.log.warn('⚠️  Configuration app-content non trouvée');
            }
        } catch (error) {
            sails.log.error('❌ Erreur lors de la vérification de la configuration:', error.message);
        }

        // 7. Recommandations
        sails.log.info('\n💡 Recommandations...');

        const totalOffres = await OffreAbonnement.count();
        const totalPromotions = await PromotionAbonnement.count();

        if (totalOffres === 0) {
            sails.log.info('🔄 Exécutez: sails run init-abonnements');
        }

        if (totalOffres > 0 && totalPromotions > 0) {
            sails.log.info('📤 Pour sauvegarder: sails run export-abonnements');
        }

        if (totalOffres === 0 && totalPromotions === 0) {
            sails.log.info('🚨 Système d\'abonnements vide - initialisation requise');
        }

        // 8. Résumé final
        const summary = {
            success: true,
            database: 'OK',
            totalOffres,
            totalPromotions,
            totalEcoles: await Ecoles.count(),
            hasConfig: !!sails.config.appContent
        };

        sails.log.info('\n🎯 Résumé de la vérification:');
        sails.log.info(`   - Base de données: ${summary.database}`);
        sails.log.info(`   - Offres: ${summary.totalOffres}`);
        sails.log.info(`   - Promotions: ${summary.totalPromotions}`);
        sails.log.info(`   - Écoles: ${summary.totalEcoles}`);
        sails.log.info(`   - Configuration: ${summary.hasConfig ? '✅' : '❌'}`);

        return summary;

    } catch (error) {
        sails.log.error('❌ Erreur lors de la vérification:', error);
        return { success: false, error: error.message };
    }
};

