#!/bin/bash
# Validation Finale v0.101
# Lance tous les tests pour confirmer que la version est prête

set -e

echo "🎯 VALIDATION FINALE v0.101"
echo "==========================="
echo ""

PASSED=0
FAILED=0
RESULTS=()

# Fonction pour logger les résultats
log_result() {
  local name=$1
  local status=$2
  if [ "$status" -eq 0 ]; then
    RESULTS+=("✅ $name")
    ((PASSED++))
  else
    RESULTS+=("❌ $name")
    ((FAILED++))
  fi
}

# 1. Backend Tests
echo "1️⃣ Tests Backend (Go)"
echo "----------------------"
cd backend 2>/dev/null || cd ../backend 2>/dev/null || { echo "❌ Dossier backend non trouvé"; exit 1; }
if go test ./... -short -count=1 2>&1 | tee /tmp/go_tests.txt; then
  log_result "Tests Backend" 0
else
  log_result "Tests Backend" 1
fi
echo ""

# 2. Frontend Build
echo "2️⃣ Build Frontend"
echo "------------------"
cd ../frontend 2>/dev/null || cd frontend 2>/dev/null
if npm run build 2>&1 | tail -5; then
  log_result "Build Frontend" 0
else
  log_result "Build Frontend" 1
fi
echo ""

# 3. Tests E2E (optionnel)
echo "3️⃣ Tests E2E"
echo "-------------"
if [ -f "playwright.config.ts" ]; then
  if npm run test:e2e -- --reporter=dot 2>&1 | tail -10; then
    log_result "Tests E2E" 0
  else
    log_result "Tests E2E" 1
  fi
else
  echo "⚠️ Playwright non configuré, skip"
  RESULTS+=("⚠️ Tests E2E (skipped)")
fi
echo ""

# 4. API Health Check
echo "4️⃣ API Health Check"
echo "--------------------"
API_URL="${API_URL:-http://localhost:8080}"
if curl -sf "$API_URL/health" > /dev/null 2>&1; then
  log_result "API Health" 0
  echo "API répond sur $API_URL"
else
  echo "⚠️ API non accessible sur $API_URL"
  RESULTS+=("⚠️ API Health (server not running)")
fi
echo ""

# 5. Parcours Utilisateur
echo "5️⃣ Parcours Utilisateur"
echo "------------------------"
if [ -f "../test_user_journey.sh" ]; then
  cd ..
  if bash test_user_journey.sh 2>&1 | tail -20; then
    log_result "Parcours Utilisateur" 0
  else
    log_result "Parcours Utilisateur" 1
  fi
elif [ -f "test_user_journey.sh" ]; then
  if bash test_user_journey.sh 2>&1 | tail -20; then
    log_result "Parcours Utilisateur" 0
  else
    log_result "Parcours Utilisateur" 1
  fi
else
  echo "⚠️ Script test_user_journey.sh non trouvé"
  RESULTS+=("⚠️ Parcours Utilisateur (script missing)")
fi
echo ""

# 6. Vérification JSON State
echo "6️⃣ État v0.101"
echo "---------------"
if [ -f "V0101_STATE.json" ]; then
  SCORE=$(jq -r '.objective.current_score' V0101_STATE.json)
  TODO_COUNT=$(jq '[.phases[].tasks[] | select(.status == "TODO")] | length' V0101_STATE.json)
  BLOCKED_COUNT=$(jq '[.phases[].tasks[] | select(.status == "BLOCKED")] | length' V0101_STATE.json)
  
  echo "Score actuel: $SCORE/100"
  echo "Tâches TODO: $TODO_COUNT"
  echo "Tâches BLOCKED: $BLOCKED_COUNT"
  
  if [ "$TODO_COUNT" -eq 0 ] && [ "$BLOCKED_COUNT" -eq 0 ]; then
    log_result "Toutes tâches complétées" 0
  else
    log_result "Tâches restantes" 1
  fi
else
  echo "⚠️ V0101_STATE.json non trouvé"
  RESULTS+=("⚠️ État v0.101 (file missing)")
fi
echo ""

# Résumé
echo "=============================="
echo "📊 RÉSUMÉ"
echo "=============================="
for result in "${RESULTS[@]}"; do
  echo "$result"
done
echo ""
echo "Passés: $PASSED"
echo "Échoués: $FAILED"
echo ""

# Verdict final
if [ "$FAILED" -eq 0 ]; then
  echo "🎉 v0.101 EST PRÊTE POUR LA RELEASE!"
  echo ""
  echo "Prochaines étapes:"
  echo "  1. git add -A"
  echo "  2. git commit -m 'Release v0.101 - Proof of Concept'"
  echo "  3. git tag -a v0.101 -m 'First stable POC without Rust modules'"
  echo "  4. git push origin main --tags"
  echo "  5. Créer la release sur GitHub"
  exit 0
else
  echo "❌ Des corrections sont encore nécessaires"
  echo ""
  echo "Consulte le fichier V0101_STATE.json pour voir les tâches restantes."
  exit 1
fi
