/**
 * Script de migration : Active les emails pour tous les utilisateurs existants
 * À exécuter une seule fois après le déploiement
 */
const admin = require("firebase-admin");
const logger = require("firebase-functions/logger");

// AJOUTER CECI : Charger le fichier de clé
const serviceAccount = require("./serviceAccountKey.json");

// Initialiser Firebase Admin avec les credentials explicites
if (!admin.apps.length) {
  admin.initializeApp({
    credential: admin.credential.cert(serviceAccount), // <-- Utiliser la clé ici
    projectId: "em2rp-951dc",
  });
}

const db = admin.firestore();

/**
 * Active les notifications par email pour tous les utilisateurs existants
 */
async function migrateEmailPreferences() {
  console.log("=== DÉBUT MIGRATION EMAIL PREFERENCES ===\n");

  try {
    // 1. Récupérer tous les utilisateurs
    const usersSnapshot = await db.collection("users").get();
    console.log(`✓ ${usersSnapshot.size} utilisateurs trouvés\n`);

    // 2. Préparer les updates
    const updates = [];
    let alreadyEnabled = 0;
    let toUpdate = 0;

    usersSnapshot.forEach((doc) => {
      const user = doc.data();
      const prefs = user.notificationPreferences || {};

      // Vérifier si déjà activé
      if (prefs.emailEnabled === true) {
        alreadyEnabled++;
        console.log(`  ○ ${user.email || doc.id}: emails déjà activés`);
      } else {
        toUpdate++;
        console.log(`  ✓ ${user.email || doc.id}: activation des emails`);

        updates.push({
          ref: doc.ref,
          data: {
            "notificationPreferences.emailEnabled": true,
          },
        });
      }
    });

    console.log(`\n--- RÉSUMÉ ---`);
    console.log(`  Total utilisateurs: ${usersSnapshot.size}`);
    console.log(`  Déjà activés: ${alreadyEnabled}`);
    console.log(`  À mettre à jour: ${toUpdate}`);

    // 3. Appliquer les mises à jour par batches de 500 (limite Firestore)
    if (updates.length > 0) {
      console.log(`\nApplication des mises à jour...`);

      const batchSize = 500;
      for (let i = 0; i < updates.length; i += batchSize) {
        const batch = db.batch();
        const currentBatch = updates.slice(i, i + batchSize);

        currentBatch.forEach((update) => {
          batch.update(update.ref, update.data);
        });

        await batch.commit();
        console.log(`  ✓ Batch ${Math.floor(i / batchSize) + 1}/${Math.ceil(updates.length / batchSize)} appliqué`);
      }

      console.log(`\n✓ Migration terminée avec succès !`);
      console.log(`  ${toUpdate} utilisateurs mis à jour\n`);
    } else {
      console.log(`\n✓ Aucune mise à jour nécessaire\n`);
    }

    console.log("=== FIN MIGRATION ===");
    return {
      success: true,
      total: usersSnapshot.size,
      alreadyEnabled,
      updated: toUpdate,
    };
  } catch (error) {
    console.error("❌ ERREUR MIGRATION:", error);
    throw error;
  }
}

// Exécuter la migration si appelé directement
if (require.main === module) {
  migrateEmailPreferences()
      .then((result) => {
        console.log("\n✓ Migration réussie:", result);
        process.exit(0);
      })
      .catch((error) => {
        console.error("\n❌ Migration échouée:", error);
        process.exit(1);
      });
}

module.exports = {migrateEmailPreferences};

