/**
 * Script de migration pour ajouter le champ 'id' aux équipements qui n'en ont pas
 *
 * Ce script parcourt tous les documents de la collection 'equipments' et ajoute
 * le champ 'id' avec la valeur du document ID si ce champ est manquant.
 */

const admin = require("firebase-admin");
const serviceAccount = require("./serviceAccountKey.json");

// Initialiser Firebase Admin
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
});

const db = admin.firestore();

async function migrateEquipmentIds() {
  console.log("🔧 Migration: Ajout du champ id aux équipements");
  console.log("================================================\n");

  try {
    // Récupérer tous les équipements
    const equipmentsSnapshot = await db.collection("equipments").get();
    console.log(`📦 Total d'équipements: ${equipmentsSnapshot.size}`);

    let missingIdCount = 0;
    let updatedCount = 0;
    const errorCount = 0;
    const batch = db.batch();
    let batchCount = 0;

    for (const doc of equipmentsSnapshot.docs) {
      const data = doc.data();

      // Vérifier si le champ 'id' est manquant ou vide
      if (!data.id || data.id === "") {
        missingIdCount++;
        console.log(`❌ Équipement ${doc.id} (${data.name || "Sans nom"}) : champ 'id' manquant`);

        // Ajouter au batch
        batch.update(doc.ref, {id: doc.id});
        batchCount++;
        updatedCount++;

        // Exécuter le batch tous les 500 documents (limite Firestore)
        if (batchCount === 500) {
          await batch.commit();
          console.log(`✅ Batch de ${batchCount} documents mis à jour`);
          batchCount = 0;
        }
      }
    }

    // Exécuter le dernier batch s'il reste des documents
    if (batchCount > 0) {
      await batch.commit();
      console.log(`✅ Batch final de ${batchCount} documents mis à jour`);
    }

    console.log("\n================================================");
    console.log("📊 RÉSUMÉ DE LA MIGRATION");
    console.log("================================================");
    console.log(`Total d'équipements: ${equipmentsSnapshot.size}`);
    console.log(`Équipements avec 'id' manquant: ${missingIdCount}`);
    console.log(`Équipements mis à jour: ${updatedCount}`);
    console.log(`Erreurs: ${errorCount}`);
    console.log("================================================\n");

    if (missingIdCount === 0) {
      console.log("✅ Tous les équipements ont déjà un champ id !");
    } else if (updatedCount === missingIdCount) {
      console.log("✅ Migration terminée avec succès !");
    } else {
      console.log("⚠️ Migration terminée avec des erreurs");
    }
  } catch (error) {
    console.error("❌ Erreur lors de la migration:", error);
    throw error;
  }
}

// Exécuter la migration
migrateEquipmentIds()
    .then(() => {
      console.log("\n✅ Script terminé");
      process.exit(0);
    })
    .catch((error) => {
      console.error("\n❌ Script échoué:", error);
      process.exit(1);
    });
