#!/usr/bin/env python3
"""
Script de test pour valider la robustesse du parsing JSON
"""
import sys
sys.path.insert(0, '/var/www/lucas')

from analyze import nettoyer_json_response, extraire_json_intelligent, valider_reponse_ia
import json

# Tests de différents formats de réponses malformées
test_cases = [
    # Cas 1: JSON propre
    {
        "input": '{"urgence": true, "confiance": 85, "message": "Personne au sol"}',
        "expected_success": True,
        "description": "JSON propre"
    },
    # Cas 2: JSON avec markdown
    {
        "input": '```json\n{"urgence": false, "confiance": 90, "message": "Pièce vide"}\n```',
        "expected_success": True,
        "description": "JSON dans markdown"
    },
    # Cas 3: JSON avec texte avant
    {
        "input": 'Voici mon analyse:\n{"urgence": true, "confiance": 75, "message": "Chute détectée"}',
        "expected_success": True,
        "description": "JSON avec texte avant"
    },
    # Cas 4: JSON avec texte après
    {
        "input": '{"urgence": false, "confiance": 95, "message": "Tout va bien"}\nVoilà mon analyse.',
        "expected_success": True,
        "description": "JSON avec texte après"
    },
    # Cas 5: JSON avec espaces
    {
        "input": '   \n\n   {"urgence": true, "confiance": 80, "message": "Urgence"}   \n\n   ',
        "expected_success": True,
        "description": "JSON avec espaces"
    },
    # Cas 6: JSON multiligne
    {
        "input": '''{
    "urgence": true,
    "confiance": 88,
    "message": "Personne allongée"
}''',
        "expected_success": True,
        "description": "JSON multiligne"
    },
    # Cas 7: Réponse complètement invalide
    {
        "input": 'Ceci n\'est pas du JSON du tout, juste du texte',
        "expected_success": False,
        "description": "Texte non-JSON"
    },
    # Cas 8: JSON incomplet
    {
        "input": '{"urgence": true, "confiance": ',
        "expected_success": False,
        "description": "JSON incomplet"
    },
]

print("="*70)
print("TEST DE ROBUSTESSE DU PARSING JSON")
print("="*70)

passed = 0
failed = 0

for i, test in enumerate(test_cases, 1):
    print(f"\n[TEST {i}] {test['description']}")
    print(f"Input: {repr(test['input'][:60])}...")

    try:
        # Tenter l'extraction
        result = extraire_json_intelligent(test['input'])

        if result:
            # Valider le résultat
            is_valid = valider_reponse_ia(result)

            if is_valid and test['expected_success']:
                print(f"✓ SUCCÈS - JSON extrait: {result}")
                passed += 1
            elif not is_valid and test['expected_success']:
                print(f"✗ ÉCHEC - JSON invalide: {result}")
                failed += 1
            elif is_valid and not test['expected_success']:
                print(f"✗ ÉCHEC INATTENDU - JSON trouvé alors qu'on attendait un échec")
                failed += 1
            else:
                print(f"✓ SUCCÈS - Échec attendu correctement géré")
                passed += 1
        else:
            if test['expected_success']:
                print(f"✗ ÉCHEC - Aucun JSON extrait")
                failed += 1
            else:
                print(f"✓ SUCCÈS - Échec correctement détecté")
                passed += 1

    except Exception as e:
        if test['expected_success']:
            print(f"✗ ÉCHEC - Exception: {type(e).__name__}: {e}")
            failed += 1
        else:
            print(f"✓ SUCCÈS - Exception attendue: {type(e).__name__}")
            passed += 1

print("\n" + "="*70)
print(f"RÉSULTATS: {passed} réussis, {failed} échoués sur {len(test_cases)} tests")
print("="*70)

if failed == 0:
    print("\n✓ TOUS LES TESTS SONT PASSÉS ! Le système est robuste.")
    sys.exit(0)
else:
    print(f"\n✗ {failed} test(s) ont échoué. Révision nécessaire.")
    sys.exit(1)
