import fs from 'node:fs';
import path from 'node:path';
import { fileURLToPath } from 'node:url';

const __dirname = path.dirname(fileURLToPath(import.meta.url));
const WFRP4E_SCRIPTS = '/home/morr/work/foundryvtt/WFRP4e-FoundryVTT/scripts';
const FR_SCRIPTS = '/home/morr/work/foundryvtt/foundryvtt-wh4-lang-fr-fr/scripts';
const REVIEW_FILE = path.join(__dirname, 'scripts-to-review.json');
const REPORT_FILE = path.join(__dirname, 'review-comparison.md');

const scriptsToReview = JSON.parse(fs.readFileSync(REVIEW_FILE, 'utf-8'));

let report = `# Scripts nécessitant révision manuelle\n\n`;
report += `Total de scripts: ${scriptsToReview.length}\n\n`;
report += `Ces scripts contiennent des traductions en français mais ont été modifiés dans WFRP4E.\n`;
report += `Ils nécessitent une révision manuelle pour intégrer les changements tout en préservant les traductions.\n\n`;
report += `---\n\n`;

scriptsToReview.forEach(({file}, index) => {
    const wfrp4ePath = path.join(WFRP4E_SCRIPTS, file);
    const frPath = path.join(FR_SCRIPTS, file);

    const wfrp4eContent = fs.readFileSync(wfrp4ePath, 'utf-8');
    const frContent = fs.readFileSync(frPath, 'utf-8');

    report += `## ${index + 1}. ${file}\n\n`;

    // Extraire les différences notables
    const wfrp4eLines = wfrp4eContent.split('\n').length;
    const frLines = frContent.split('\n').length;

    report += `- **Lignes WFRP4E**: ${wfrp4eLines}\n`;
    report += `- **Lignes FR**: ${frLines}\n`;
    report += `- **Différence**: ${wfrp4eLines - frLines} lignes\n\n`;

    // Extraire les textes notables
    const wfrp4eTexts = extractNotableTexts(wfrp4eContent);
    const frTexts = extractNotableTexts(frContent);

    if (wfrp4eTexts.length > 0 || frTexts.length > 0) {
        report += `### Textes identifiés\n\n`;

        if (wfrp4eTexts.length > 0) {
            report += `**WFRP4E (anglais)**:\n`;
            wfrp4eTexts.forEach(text => {
                report += `- \`${text}\`\n`;
            });
            report += `\n`;
        }

        if (frTexts.length > 0) {
            report += `**FR (français)**:\n`;
            frTexts.forEach(text => {
                report += `- \`${text}\`\n`;
            });
            report += `\n`;
        }
    }

    // Afficher le code côte à côte si court
    if (wfrp4eLines < 30 && frLines < 30) {
        report += `### Code WFRP4E\n\n\`\`\`javascript\n${wfrp4eContent}\n\`\`\`\n\n`;
        report += `### Code FR\n\n\`\`\`javascript\n${frContent}\n\`\`\`\n\n`;
    }

    report += `### Actions recommandées\n\n`;
    report += `- [ ] Vérifier les changements structurels dans WFRP4E\n`;
    report += `- [ ] Intégrer les modifications tout en gardant les traductions FR\n`;
    report += `- [ ] Tester le script après modification\n\n`;
    report += `---\n\n`;
});

function extractNotableTexts(content) {
    const texts = new Set();

    // Patterns pour extraire les textes
    const patterns = [
        /ui\.notifications\.(info|warn|error|notify)\s*\(\s*["'`]([^"'`]+)["'`]/g,
        /this\.script\.(scriptNotification|scriptMessage|notification)\s*\(\s*["'`]([^"'`]+)["'`]/g,
        /["'`](Loading|Could not find|Chargement|Impossible de trouver|créé|modifié|supprimé)[^"'`]*["'`]/gi
    ];

    patterns.forEach(pattern => {
        const matches = content.matchAll(pattern);
        for (const match of matches) {
            const text = match[2] || match[1];
            if (text && text.length > 3 && text.length < 100) {
                texts.add(text);
            }
        }
    });

    return Array.from(texts);
}

fs.writeFileSync(REPORT_FILE, report, 'utf-8');

console.log(`\nRapport de révision généré: ${REPORT_FILE}`);
console.log(`\nNombre de scripts à réviser: ${scriptsToReview.length}`);
console.log(`\nOuvrez le fichier avec votre éditeur préféré pour réviser les scripts.`);
console.log(`Vous pouvez aussi utiliser un outil de diff comme 'meld' ou 'kdiff3' pour comparer:`);
console.log(`\nExemple:`);
console.log(`  meld ${FR_SCRIPTS}/${scriptsToReview[0].file} ${WFRP4E_SCRIPTS}/${scriptsToReview[0].file}`);
