/**
 * Macro FoundryVTT - Création des 78 cartes de Tarot
 * Cette macro crée automatiquement toutes les cartes du tarot
 * en se basant sur les images présentes dans assets/tarots/
 */

// Configuration des symboles et leurs variantes de noms
const SYMBOLES_MAP = {
  'baton': 'baton',
  'coupe': 'coupe',
  'denier': 'denier',
  'epee': 'epee',
  'd-epee': 'epee'
};

// Configuration des valeurs et leurs variantes
const VALEURS_MAP = {
  'as': '1',
  'deux': '2',
  'trois': '3',
  'quatre': '4',
  'cinq': '5',
  'six': '6',
  'sept': '7',
  'huit': '8',
  'neuf': '9',
  'dix': '10',
  'valet': 'valet',
  'cavalier': 'cavalier',
  'reine': 'reine',
  'roi': 'roi'
};

// Noms des atouts majeurs (1 à 22)
const ATOUTS = {
  '1': 'Le Bateleur',
  '2': 'La Papesse',
  '3': 'L\'Impératrice',
  '4': 'L\'Empereur',
  '5': 'Le Pape',
  '6': 'L\'Amoureux',
  '7': 'Le Chariot',
  '8': 'La Justice',
  '9': 'L\'Hermite',
  '10': 'La Roue de Fortune',
  '11': 'La Force',
  '12': 'Le Pendu',
  '13': 'L\'Arcane sans Nom',
  '14': 'La Tempérance',
  '15': 'Le Diable',
  '16': 'La Maison Dieu',
  '17': 'L\'Étoile',
  '18': 'La Lune',
  '19': 'Le Soleil',
  '20': 'Le Jugement',
  '21': 'Le Monde',
  '22': 'Le Mat'
};

// Fonction pour parser le nom de fichier et déterminer les propriétés
function parseCardFileName(filename) {
  // Retirer le numéro initial et l'extension
  const nameWithoutExt = filename.replace(/\.jpg$/i, '').replace(/^\d+-/, '');

  // Cas spécial pour le duplicata de l'Amoureux
  if (filename.includes('_1.jpg')) {
    return null; // Ignorer le duplicata
  }

  // Détection des atouts majeurs (fichiers 1 à 22)
  const atoutMatch = filename.match(/^(\d+)-/);
  if (atoutMatch) {
    const num = atoutMatch[1];
    if (parseInt(num) <= 22 && ATOUTS[num]) {
      return {
        name: ATOUTS[num],
        type: 'atout',
        symbole: 'coupe', // Valeur par défaut pour les atouts
        valeur: '1',
        image: `systems/fvtt-hamalron/assets/tarots/${filename}`
      };
    }
  }

  // Détection des cartes mineures (figures et numéros)
  for (const [key, value] of Object.entries(VALEURS_MAP)) {
    if (nameWithoutExt.includes(key)) {
      // Chercher le symbole
      for (const [symboleKey, symboleValue] of Object.entries(SYMBOLES_MAP)) {
        if (nameWithoutExt.includes(symboleKey)) {
          // Déterminer si c'est une figure ou un numéro
          const isFigure = ['valet', 'cavalier', 'reine', 'roi'].includes(key);

          // Construire le nom de la carte
          let cardName = key.charAt(0).toUpperCase() + key.slice(1);
          cardName += ' de ' + SYMBOLES_MAP[symboleKey].charAt(0).toUpperCase() + SYMBOLES_MAP[symboleKey].slice(1);

          return {
            name: cardName,
            type: isFigure ? 'figure' : 'numéro',
            symbole: symboleValue,
            valeur: value,
            image: `systems/fvtt-hamalron/assets/tarots/${filename}`
          };
        }
      }
    }
  }

  return null;
}

// Fonction principale pour créer les cartes
async function createTarotDeck() {
  ui.notifications.info("Début de la création du jeu de Tarot...");

  // Créer ou récupérer le dossier pour les tarots
  let tarotFolder = game.folders.find(f => f.name === "Cartes de Tarot" && f.type === "Item");

  if (!tarotFolder) {
    tarotFolder = await Folder.create({
      name: "Cartes de Tarot",
      type: "Item",
      color: "#8b4513",
      sorting: "a"
    });
    console.log("Dossier 'Cartes de Tarot' créé");
  } else {
    console.log("Dossier 'Cartes de Tarot' existant trouvé");
  }

  // Liste des fichiers d'images (à adapter selon votre arborescence)
  const imageFiles = [
    '1-le-bateleur.jpg',
    '2-la-papesse.jpg',
    '3-l-imperatrice.jpg',
    '4-l-empereur.jpg',
    '5-le-pape.jpg',
    '6-l-amoureux.jpg',
    '7-le-chariot.jpg',
    '8-la-justice.jpg',
    '9-l-hermite.jpg',
    '10-la-roue-de-fortune.jpg',
    '11-la-force.jpg',
    '12-le-pendu.jpg',
    '13-l-arcane-sans-nom.jpg',
    '14-la-temperance.jpg',
    '15-le-diable.jpg',
    '16-la-maison-dieu.jpg',
    '17-l-etoile.jpg',
    '18-la-lune.jpg',
    '19-le-soleil.jpg',
    '20-le-jugement.jpg',
    '21-le-monde.jpg',
    '22-le-mat.jpg',
    '23-as-de-baton.jpg',
    '24-deux-de-baton.jpg',
    '25-trois-de-baton.jpg',
    '26-quatre-de-baton.jpg',
    '27-cinq-de-baton.jpg',
    '28-six-de-baton.jpg',
    '29-sept-de-baton.jpg',
    '30-huit-de-baton.jpg',
    '31-neuf-de-baton.jpg',
    '32-dix-de-baton.jpg',
    '33-valet-de-baton.jpg',
    '34-cavalier-de-baton.jpg',
    '35-reine-de-baton.jpg',
    '36-roi-de-baton.jpg',
    '37-as-de-coupe.jpg',
    '38-deux-de-coupe.jpg',
    '39-trois-de-coupe.jpg',
    '40-quatre-de-coupe.jpg',
    '41-cinq-de-coupe.jpg',
    '42-six-de-coupe.jpg',
    '43-sept-de-coupe.jpg',
    '44-huit-de-coupe.jpg',
    '45-neuf-de-coupe.jpg',
    '46-dix-de-coupe.jpg',
    '47-valet-de-coupe.jpg',
    '48-cavalier-de-coupe.jpg',
    '49-reine-de-coupe.jpg',
    '50-roi-de-coupe.jpg',
    '51-as-de-denier.jpg',
    '52-deux-de-denier.jpg',
    '53-trois-de-denier.jpg',
    '54-quatre-de-denier.jpg',
    '55-cinq-de-denier.jpg',
    '56-six-de-denier.jpg',
    '57-sept-de-denier.jpg',
    '58-huit-de-denier.jpg',
    '59-neuf-de-denier.jpg',
    '60-dix-de-denier.jpg',
    '61-valet-de-denier.jpg',
    '62-cavalier-de-denier.jpg',
    '63-reine-de-denier.jpg',
    '64-roi-de-denier.jpg',
    '65-as-d-epee.jpg',
    '66-deux-d-epee.jpg',
    '67-trois-d-epee.jpg',
    '68-quatre-d-epee.jpg',
    '69-cinq-d-epee.jpg',
    '70-six-d-epee.jpg',
    '71-sept-d-epee.jpg',
    '72-huit-d-epee.jpg',
    '73-neuf-d-epee.jpg',
    '74-dix-d-epee.jpg',
    '75-valet-d-epee.jpg',
    '76-cavalier-d-epee.jpg',
    '77-reine-d-epee.jpg',
    '78-roi-d-epee.jpg'
  ];

  let created = 0;
  let skipped = 0;
  let errors = 0;

  for (const filename of imageFiles) {
    const cardData = parseCardFileName(filename);

    if (!cardData) {
      console.log(`Fichier ignoré: ${filename}`);
      skipped++;
      continue;
    }

    try {
      // Vérifier si la carte existe déjà
      const existing = game.items.find(i => i.name === cardData.name && i.type === 'tarot');
      if (existing) {
        console.log(`Carte déjà existante: ${cardData.name}`);
        skipped++;
        continue;
      }

      // Créer l'item de type tarot dans le dossier
      await Item.create({
        name: cardData.name,
        type: 'tarot',
        img: cardData.image,
        folder: tarotFolder.id,
        system: {
          type: cardData.type,
          symbole: cardData.symbole,
          valeur: cardData.valeur,
          description: `<p>${cardData.name}</p>`,
          image: cardData.image
        }
      });

      console.log(`✓ Créé: ${cardData.name}`);
      created++;

    } catch (error) {
      console.error(`Erreur lors de la création de ${cardData.name}:`, error);
      errors++;
    }
  }

  // Afficher un résumé
  const message = `
    <h3>Création du jeu de Tarot terminée</h3>
    <p><strong>Cartes créées:</strong> ${created}</p>
    <p><strong>Cartes ignorées:</strong> ${skipped}</p>
    <p><strong>Erreurs:</strong> ${errors}</p>
  `;

  ChatMessage.create({
    user: game.user.id,
    content: message
  });

  ui.notifications.info(`Création terminée: ${created} cartes créées, ${skipped} ignorées, ${errors} erreurs.`);
}

// Exécution de la macro
createTarotDeck();
