/**
 * Macro pour remplacer les chemins d'images dans les compendiums
 * Remplace "fvtt-hawkmoon-cyd" par "fvtt-mournblade-cyd-2-0" dans tous les champs 'img'
 */

(async () => {
  // Confirmation avant de procéder
  let confirm = await Dialog.confirm({
    title: "Remplacement des chemins d'images",
    content: `<p>Cette macro va :</p>
      <ul>
        <li>Déverrouiller tous les compendiums</li>
        <li>Remplacer "fvtt-hawkmoon-cyd" par "fvtt-mournblade-cyd-2-0" dans tous les champs 'img'</li>
        <li>Reverrouiller les compendiums</li>
      </ul>
      <p><strong>Voulez-vous continuer ?</strong></p>`,
    defaultYes: false
  });

  if (!confirm) {
    ui.notifications.info("Opération annulée");
    return;
  }

  ui.notifications.info("Début du traitement des compendiums...");

  let totalUpdated = 0;
  let compendiumsProcessed = 0;

  // Parcourir tous les compendiums
  for (let pack of game.packs) {
    // Filtrer uniquement les compendiums du système mournblade
    if (!pack.metadata.packageName.includes("mournblade")) continue;

    console.log(`Traitement du compendium: ${pack.metadata.label}`);
    compendiumsProcessed++;

    try {
      // Unlock le compendium
      await pack.configure({ locked: false });

      // Récupérer tous les documents du compendium
      let documents = await pack.getDocuments();
      let updatedInPack = 0;

      for (let doc of documents) {
        let needsUpdate = false;
        let updateData = {};

        // Vérifier le champ img principal
        if (doc.img && doc.img.includes("fvtt-hawkmoon-cyd")) {
          updateData.img = doc.img.replace(/fvtt-hawkmoon-cyd/g, "fvtt-mournblade-cyd-2-0");
          needsUpdate = true;
        }

        // Pour les acteurs, vérifier aussi prototypeToken.texture.src
        if (doc.documentName === "Actor" && doc.prototypeToken?.texture?.src) {
          if (doc.prototypeToken.texture.src.includes("fvtt-hawkmoon-cyd")) {
            updateData["prototypeToken.texture.src"] = doc.prototypeToken.texture.src.replace(/fvtt-hawkmoon-cyd/g, "fvtt-mournblade-cyd-2-0");
            needsUpdate = true;
          }
        }

        // Pour les items contenus dans les acteurs
        if (doc.documentName === "Actor" && doc.items) {
          for (let item of doc.items) {
            if (item.img && item.img.includes("fvtt-hawkmoon-cyd")) {
              // Note: Les items embarqués nécessitent une approche différente
              needsUpdate = true;
            }
          }
        }

        // Pour les scènes, vérifier background.src et les tokens
        if (doc.documentName === "Scene") {
          if (doc.background?.src && doc.background.src.includes("fvtt-hawkmoon-cyd")) {
            updateData["background.src"] = doc.background.src.replace(/fvtt-hawkmoon-cyd/g, "fvtt-mournblade-cyd-2-0");
            needsUpdate = true;
          }
        }

        // Effectuer la mise à jour si nécessaire
        if (needsUpdate) {
          await doc.update(updateData);
          updatedInPack++;
          console.log(`  - Mise à jour: ${doc.name}`);
        }
      }

      // Lock le compendium
      await pack.configure({ locked: true });

      if (updatedInPack > 0) {
        ui.notifications.info(`${pack.metadata.label}: ${updatedInPack} document(s) mis à jour`);
        totalUpdated += updatedInPack;
      }

    } catch (error) {
      console.error(`Erreur lors du traitement de ${pack.metadata.label}:`, error);
      ui.notifications.error(`Erreur sur ${pack.metadata.label}: ${error.message}`);

      // Tenter de reverrouiller en cas d'erreur
      try {
        await pack.configure({ locked: true });
      } catch (lockError) {
        console.error(`Impossible de reverrouiller ${pack.metadata.label}:`, lockError);
      }
    }
  }

  ui.notifications.info(`Traitement terminé ! ${totalUpdated} document(s) mis à jour dans ${compendiumsProcessed} compendium(s).`);
  console.log(`=== Résumé ===`);
  console.log(`Compendiums traités: ${compendiumsProcessed}`);
  console.log(`Total de documents mis à jour: ${totalUpdated}`);

})();
