#!/usr/bin/env node

/**
 * RUNNER SIMPLE POUR PIPELINE 4 PHASES
 * Garantit la génération du rapport AutoReporter
 */

import { spawn } from 'child_process';
import { AutoReporter } from './reporters/AutoReporter.js';

// Configuration AutoReporter
const autoReporter = new AutoReporter();

console.log('🚀 RUNNER PIPELINE 4 PHASES - GÉNÉRATION RAPPORT GARANTIE');
console.log('📋 Workflow: Generation initial => adversarial => Heavy enhancement => human touch');

// Fonction pour exécuter le test
function runPipelineTest() {
  return new Promise((resolve, reject) => {
    console.log('\n🔄 === DÉMARRAGE TEST PIPELINE 4 PHASES ===');

    // Lancer le test avec Node.js test runner
    const testProcess = spawn('node', ['--test', 'tests/pipeline-4-phases-force-report.test.js'], {
      cwd: process.cwd(),
      stdio: 'pipe'
    });

    let stdout = '';
    let stderr = '';

    // Capturer stdout
    testProcess.stdout.on('data', (data) => {
      const output = data.toString();
      stdout += output;
      process.stdout.write(output); // Afficher en temps réel
    });

    // Capturer stderr
    testProcess.stderr.on('data', (data) => {
      const output = data.toString();
      stderr += output;
      process.stderr.write(output); // Afficher en temps réel
    });

    // Gestion fin de processus
    testProcess.on('close', (code) => {
      console.log(`\n✅ Test terminé avec code: ${code}`);

      if (code === 0) {
        console.log('🎉 Pipeline 4 phases exécuté avec succès !');
        resolve({ stdout, stderr, code });
      } else {
        console.log('❌ Pipeline 4 phases a échoué');
        reject(new Error(`Test failed with code ${code}`));
      }
    });

    // Gestion erreurs
    testProcess.on('error', (error) => {
      console.error('❌ Erreur lors du lancement:', error.message);
      reject(error);
    });
  });
}

// Exécution principale
async function main() {
  try {
    await runPipelineTest();

    console.log('\n🎯 === VÉRIFICATION RAPPORT AUTO-REPORTER ===');

    // Attendre un peu pour que AutoReporter finalise
    await new Promise(resolve => setTimeout(resolve, 3000));

    console.log('✅ Runner pipeline 4 phases terminé');
    console.log('📊 Vérifiez le dossier reports/ pour le nouveau rapport');

    process.exit(0);

  } catch (error) {
    console.error('\n❌ Erreur dans le runner:', error.message);
    process.exit(1);
  }
}

// Lancer
main();