import fs from 'fs';
import path from 'path';

// Lire et parser le JSON
const jsonPath = './compendium/wfrp4e-core.items.json';
console.log('Lecture du fichier JSON...');
const jsonData = JSON.parse(fs.readFileSync(jsonPath, 'utf8'));

// Créer le mapping id -> name
const idToName = {};
jsonData.entries.forEach(entry => {
  if (entry.id && entry.name) {
    idToName[entry.id] = entry.name;
  }
});

console.log(`Nombre d'entrées trouvées: ${Object.keys(idToName).length}`);

// Fonction pour échapper les regex
function escapeRegExp(string) {
  return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}

// Parcourir tous les fichiers .js dans scripts/
const scriptsDir = './scripts/';
console.log('Analyse des fichiers dans', scriptsDir);
const files = fs.readdirSync(scriptsDir).filter(f => f.endsWith('.js'));
console.log(`${files.length} fichiers .js trouvés`);

let totalReplacements = 0;
let filesModified = 0;
const modifications = {};

files.forEach(file => {
  const filePath = path.join(scriptsDir, file);
  let content = fs.readFileSync(filePath, 'utf8');
  let originalContent = content;
  let fileReplacements = 0;

  // Pour chaque ID, chercher et remplacer les occurrences entre guillemets
  Object.entries(idToName).forEach(([id, name]) => {
    // Chercher l'ID entre guillemets simples ou doubles
    const pattern1 = new RegExp('"' + escapeRegExp(id) + '"', 'g');
    const pattern2 = new RegExp("'" + escapeRegExp(id) + "'", 'g');

    const matches1 = (content.match(pattern1) || []).length;
    const matches2 = (content.match(pattern2) || []).length;

    if (matches1 > 0 || matches2 > 0) {
      content = content.replace(pattern1, '"' + name + '"');
      content = content.replace(pattern2, "'" + name + "'");

      if (!modifications[file]) modifications[file] = [];
      modifications[file].push(`  ${id} -> ${name} (${matches1 + matches2} fois)`);
      fileReplacements += matches1 + matches2;
    }
  });

  if (content !== originalContent) {
    fs.writeFileSync(filePath, content, 'utf8');
    filesModified++;
    totalReplacements += fileReplacements;
  }
});

console.log('\n===== RÉSULTAT =====');
console.log(`Fichiers modifiés: ${filesModified} / ${files.length}`);
console.log(`Total de remplacements: ${totalReplacements}`);

if (filesModified > 0) {
  console.log('\n===== DÉTAILS DES MODIFICATIONS =====');
  Object.entries(modifications).forEach(([file, changes]) => {
    console.log(`\n${file}:`);
    changes.slice(0, 10).forEach(change => console.log(change));
    if (changes.length > 10) {
      console.log(`  ... et ${changes.length - 10} autres remplacements`);
    }
  });
}

console.log('\n✓ Traitement terminé !');
