#!/usr/bin/env node

/**
 * Script de vérification des prérequis pour le projet chartbastan
 * Node.js 20.9+ requis
 */

const { execSync } = require('child_process');
const { readFileSync } = require('fs');

const REQUIRED_NODE_VERSION = '20.9.0';

// Fonction pour comparer les versions de Node.js
function compareNodeVersions(required, current) {
  const requiredParts = required.replace('v', '').split('.').map(Number);
  const currentParts = current.replace('v', '').split('.').map(Number);

  for (let i = 0; i < 3; i++) {
    if (currentParts[i] > requiredParts[i]) return 1;
    if (currentParts[i] < requiredParts[i]) return -1;
  }
  return 0;
}

// Fonction pour exécuter une commande et capturer la sortie
function runCommand(cmd) {
  try {
    return execSync(cmd, { encoding: 'utf-8' }).trim();
  } catch (error) {
    return null;
  }
}

// Vérifications
console.log('🔍 Vérification des prérequis...\n');

// 1. Vérifier Node.js
const nodeVersion = runCommand('node --version');
if (!nodeVersion) {
  console.error('❌ Node.js n\'est pas installé');
  process.exit(1);
}

const versionComparison = compareNodeVersions(REQUIRED_NODE_VERSION, nodeVersion);
if (versionComparison < 0) {
  console.error(`❌ Node.js version ${nodeVersion} est trop ancienne`);
  console.error(`   Version requise: ${REQUIRED_NODE_VERSION}+`);
  process.exit(1);
}

console.log(`✅ Node.js ${nodeVersion} (requis: ${REQUIRED_NODE_VERSION}+)`);

// 2. Vérifier npm
const npmVersion = runCommand('npm --version');
if (!npmVersion) {
  console.error('❌ npm n\'est pas installé');
  process.exit(1);
}

console.log(`✅ npm ${npmVersion}`);

// 3. Vérifier npx
const npxVersion = runCommand('npx --version');
if (!npxVersion) {
  console.error('❌ npx n\'est pas installé');
  process.exit(1);
}

console.log(`✅ npx ${npxVersion}`);

console.log('\n🎉 Tous les prérequis sont satisfaits!');
