// ========================================
// DEMO DYNAMIC PROMPT ENGINE
// Démonstration du système de prompt engineering dynamique avancé
// ========================================

const { DynamicPromptEngine } = require('../lib/prompt-engine/DynamicPromptEngine');

async function demoPromptEngine() {
  console.log('🧠 === DEMO DYNAMIC PROMPT ENGINE ===\n');

  const engine = new DynamicPromptEngine();

  // Status initial
  console.log('📊 Status du moteur:');
  const status = engine.getEngineStatus();
  console.log(`  • Templates: ${status.templates.join(', ')}`);
  console.log(`  • Analyseurs: ${status.contextAnalyzers.join(', ')}`);
  console.log(`  • Règles: ${status.adaptiveRules.join(', ')}`);
  console.log(`  • Total composants: ${status.totalComponents}\n`);

  // ========================================
  // TEST 1: PROMPT TECHNIQUE STANDARD
  // ========================================
  console.log('🔧 === TEST 1: PROMPT TECHNIQUE STANDARD ===');

  const testContent = {
    titre: 'Installation panneau signalétique',
    intro: 'Guide complet pour installer vos panneaux',
    section1: 'Étapes de montage détaillées'
  };

  const csvData = {
    mc0: 'plaque signalétique aluminium',
    personality: { nom: 'Marc', style: 'technique' }
  };

  const result1 = await engine.generateAdaptivePrompt({
    templateType: 'technical',
    content: testContent,
    csvData: csvData,
    layerConfig: {
      intensity: 1.0,
      targetTerms: ['dibond', 'fixation', 'visserie'],
      focusAreas: ['précision technique', 'normes ISO']
    }
  });

  console.log('✅ Prompt généré:');
  console.log(result1.prompt);
  console.log('\n📊 Métadonnées:');
  console.log(`  • Longueur: ${result1.metadata.stats.promptLength} caractères`);
  console.log(`  • Variables: ${result1.metadata.stats.variablesCount}`);
  console.log(`  • Complexité: ${result1.metadata.contextAnalysis.complexity_level}`);
  console.log(`  • Domaine: ${result1.metadata.contextAnalysis.domain}\n`);

  // ========================================
  // TEST 2: PROMPT AVEC TENDANCE ECO
  // ========================================
  console.log('🌱 === TEST 2: PROMPT AVEC TENDANCE ECO-RESPONSABLE ===');

  const trend = {
    id: 'eco-responsable',
    name: 'Eco-Responsable',
    config: {
      technical: {
        targetTerms: ['durable', 'écologique', 'recyclé'],
        focusAreas: ['impact environnemental', 'cycle de vie']
      }
    }
  };

  const result2 = await engine.generateAdaptivePrompt({
    templateType: 'style',
    content: testContent,
    csvData: csvData,
    trend: trend,
    layerConfig: {
      intensity: 1.2,
      targetStyle: 'responsable et engagé'
    }
  });

  console.log('✅ Prompt avec tendance éco:');
  console.log(result2.prompt);
  console.log('\n📊 Adaptations appliquées:');
  Object.entries(result2.metadata.adaptiveConfig).forEach(([key, value]) => {
    console.log(`  • ${key}: ${value}`);
  });
  console.log();

  // ========================================
  // TEST 3: PROMPT ADVERSARIAL INTENSIF
  // ========================================
  console.log('🕵️ === TEST 3: PROMPT ADVERSARIAL INTENSIF ===');

  const result3 = await engine.generateAdaptivePrompt({
    templateType: 'adversarial',
    content: testContent,
    csvData: csvData,
    layerConfig: {
      intensity: 1.5,
      detectorTypes: ['GPTZero', 'Originality.ai'],
      stealthLevel: 'maximum'
    },
    customVariables: {
      detector_types: 'GPTZero, Originality.ai, détecteurs IA',
      target_scores: 'Humain 95%+, IA <5%',
      stealth_techniques: 'variations syntaxiques, erreurs humaines, styles multiples'
    }
  });

  console.log('✅ Prompt adversarial:');
  console.log(result3.prompt);
  console.log('\n📊 Variables personnalisées injectées:');
  result3.metadata.dynamicVariables.forEach(varName => {
    console.log(`  • ${varName}`);
  });
  console.log();

  // ========================================
  // TEST 4: COMPARAISON INTENSITÉS
  // ========================================
  console.log('⚖️ === TEST 4: COMPARAISON INTENSITÉS ===');

  const intensities = [0.5, 1.0, 1.5];

  for (const intensity of intensities) {
    const result = await engine.generateAdaptivePrompt({
      templateType: 'technical',
      content: testContent,
      csvData: csvData,
      layerConfig: { intensity }
    });

    console.log(`🎛️ Intensité ${intensity}:`);
    console.log(`  • Précision: ${result.metadata.adaptiveConfig.precision || 'standard'}`);
    console.log(`  • Style: ${result.metadata.adaptiveConfig.style || 'standard'}`);
    console.log(`  • Instructions: ${result.metadata.adaptiveConfig.instruction_type || 'STANDARD'}`);
    console.log(`  • Longueur: ${result.metadata.stats.promptLength} chars\n`);
  }

  // ========================================
  // TEST 5: TEMPLATE PERSONNALISÉ
  // ========================================
  console.log('✨ === TEST 5: TEMPLATE PERSONNALISÉ ===');

  // Ajouter template personnalisé
  engine.addCustomTemplate('creative', {
    meta: {
      role: "Tu es un créatif visionnaire spécialisé en {creative_domain}",
      inspiration: "Puise ton inspiration dans {inspiration_sources}",
      innovation: "Adopte une approche {innovation_level} et {creativity_style}"
    },
    context: {
      creative_brief: "BRIEF CRÉATIF: {creative_objective}",
      target_emotion: "ÉMOTION RECHERCHÉE: {target_feeling}",
      creative_constraints: "CONTRAINTES CRÉATIVES: {creative_limits}"
    },
    task: {
      creative_transformation: "TRANSFORMATION CRÉATIVE: {transformation_goal}",
      artistic_vision: "VISION ARTISTIQUE: {artistic_approach}",
      innovation_injection: "INJECTION D'INNOVATION: {innovation_methods}"
    }
  });

  const result5 = await engine.generateAdaptivePrompt({
    templateType: 'creative',
    content: testContent,
    csvData: csvData,
    customVariables: {
      creative_domain: 'communication visuelle immersive',
      inspiration_sources: 'art contemporain, design nordique, biomimétisme',
      innovation_level: 'disruptive',
      creativity_style: 'minimaliste premium',
      creative_objective: 'révolutionner l\'expérience signalétique',
      target_feeling: 'émerveillement et sophistication'
    }
  });

  console.log('✅ Template créatif personnalisé:');
  console.log(result5.prompt);
  console.log('\n📊 Status final:');
  const finalStatus = engine.getEngineStatus();
  console.log(`  • Templates disponibles: ${finalStatus.templates.length}`);
  console.log(`  • Nouveau template: ${finalStatus.templates.includes('creative') ? '✅' : '❌'}`);

  console.log('\n🎯 === DEMO TERMINÉE ===');
  console.log('Le DynamicPromptEngine offre:');
  console.log('• 🧠 Analyse contextuelle automatique');
  console.log('• 🎛️ Adaptation selon intensité et tendances');
  console.log('• 🔧 Templates modulaires multi-niveaux');
  console.log('• ✨ Extensibilité complète (templates, règles, analyseurs)');
  console.log('• 📊 Métadonnées détaillées pour debugging');
}

// FONCTION HELPER - Test rapide d'un template
async function quickTemplateTest(templateType, description) {
  console.log(`\n🚀 Test rapide: ${description}`);

  const engine = new DynamicPromptEngine();

  const result = await engine.generateAdaptivePrompt({
    templateType,
    content: { test: 'Contenu de test' },
    csvData: { mc0: 'test signalétique' },
    layerConfig: { intensity: 1.0 }
  });

  console.log('📏 Résumé:');
  console.log(`  • Longueur: ${result.metadata.stats.promptLength} chars`);
  console.log(`  • Variables: ${result.metadata.stats.variablesCount}`);
  console.log(`  • Complexité: ${result.metadata.contextAnalysis.complexity_level}`);

  return result;
}

// EXÉCUTER DEMO
if (require.main === module) {
  demoPromptEngine()
    .catch(console.error);
}

// Export pour tests
module.exports = { demoPromptEngine, quickTemplateTest };