#!/usr/bin/env python3
"""
Script de test pour vérifier que l'interface web TIM fonctionne correctement.
"""

import requests
import json
import sys

API_BASE = "http://localhost:8001"
STAY_ID = "15_23096332"

def test_api_connection():
    """Test la connexion à l'API."""
    print("🔍 Test 1: Connexion à l'API...")
    try:
        response = requests.get(f"{API_BASE}/", timeout=5)
        if response.status_code == 200:
            print("✅ API accessible")
            return True
        else:
            print(f"❌ API retourne le code {response.status_code}")
            return False
    except requests.exceptions.ConnectionError:
        print("❌ Impossible de se connecter à l'API")
        print("   Le serveur est-il démarré?")
        print("   Commande: python -m uvicorn pipeline_mco_pmsi.api.tim_api:app --host 0.0.0.0 --port 8001")
        return False
    except Exception as e:
        print(f"❌ Erreur: {e}")
        return False

def test_coding_proposal():
    """Test l'endpoint de proposition de codage."""
    print(f"\n🔍 Test 2: Récupération de la proposition de codage pour {STAY_ID}...")
    try:
        response = requests.get(f"{API_BASE}/stays/{STAY_ID}/coding-proposal", timeout=10)
        
        if response.status_code == 404:
            print(f"❌ Séjour {STAY_ID} non trouvé")
            print("   Avez-vous traité ce séjour avec le pipeline?")
            return False
        
        if response.status_code != 200:
            print(f"❌ Erreur HTTP {response.status_code}")
            print(f"   Réponse: {response.text}")
            return False
        
        data = response.json()
        
        print("✅ Données reçues avec succès")
        print(f"   - Stay ID: {data.get('stay_id')}")
        print(f"   - DP: {data.get('dp', {}).get('code')} - {data.get('dp', {}).get('label', 'N/A')[:50]}")
        print(f"   - DR: {data.get('dr', {}).get('code')} - {data.get('dr', {}).get('label', 'N/A')[:50]}")
        print(f"   - DAS: {len(data.get('das', []))} codes")
        print(f"   - CCAM: {len(data.get('ccam', []))} actes")
        
        # Vérifier la structure des données
        if not data.get('dp'):
            print("⚠️  Attention: Pas de DP")
        if not data.get('dr'):
            print("⚠️  Attention: Pas de DR")
        if not data.get('das'):
            print("⚠️  Attention: Pas de DAS")
        if not data.get('ccam'):
            print("⚠️  Attention: Pas de CCAM")
        
        return True
        
    except Exception as e:
        print(f"❌ Erreur: {e}")
        return False

def test_documents():
    """Test la récupération des documents."""
    print(f"\n🔍 Test 3: Récupération des documents...")
    try:
        # D'abord, récupérer la proposition de codage pour obtenir les IDs de documents
        response = requests.get(f"{API_BASE}/stays/{STAY_ID}/coding-proposal", timeout=10)
        if response.status_code != 200:
            print("❌ Impossible de récupérer la proposition de codage")
            return False
        
        data = response.json()
        
        # Extraire les IDs de documents depuis les preuves
        document_ids = set()
        for code in [data.get('dp'), data.get('dr')] + data.get('das', []) + data.get('ccam', []):
            if code and code.get('evidence'):
                for ev in code['evidence']:
                    if ev.get('document_id'):
                        document_ids.add(ev['document_id'])
        
        if not document_ids:
            print("⚠️  Aucun document trouvé dans les preuves")
            return True
        
        print(f"   Documents trouvés: {len(document_ids)}")
        
        # Tester la récupération d'un document
        doc_id = list(document_ids)[0]
        response = requests.get(f"{API_BASE}/documents/{doc_id}", timeout=10)
        
        if response.status_code == 200:
            doc_data = response.json()
            print(f"✅ Document {doc_id} récupéré")
            print(f"   - Type: {doc_data.get('document_type')}")
            print(f"   - Taille: {len(doc_data.get('content', ''))} caractères")
            return True
        else:
            print(f"❌ Erreur lors de la récupération du document {doc_id}")
            return False
            
    except Exception as e:
        print(f"❌ Erreur: {e}")
        return False

def main():
    """Fonction principale."""
    print("=" * 60)
    print("Test de l'Interface Web TIM")
    print("=" * 60)
    
    results = []
    
    # Test 1: Connexion API
    results.append(test_api_connection())
    
    if not results[0]:
        print("\n❌ Le serveur API n'est pas accessible. Arrêt des tests.")
        sys.exit(1)
    
    # Test 2: Proposition de codage
    results.append(test_coding_proposal())
    
    # Test 3: Documents
    results.append(test_documents())
    
    # Résumé
    print("\n" + "=" * 60)
    print("Résumé des tests")
    print("=" * 60)
    print(f"Tests réussis: {sum(results)}/{len(results)}")
    
    if all(results):
        print("\n✅ Tous les tests sont passés!")
        print("\n📝 Prochaines étapes:")
        print("   1. Ouvrir http://localhost:8001 dans votre navigateur")
        print(f"   2. Entrer l'ID du séjour: {STAY_ID}")
        print("   3. Cliquer sur 'Charger le séjour'")
        print("   4. Si rien ne s'affiche, ouvrir la console (F12) pour voir les erreurs")
        sys.exit(0)
    else:
        print("\n❌ Certains tests ont échoué")
        print("\n📝 Actions recommandées:")
        print("   1. Vérifier que le serveur API est démarré")
        print("   2. Vérifier que le séjour a été traité par le pipeline")
        print("   3. Consulter DIAGNOSTIC_INTERFACE_WEB.md pour plus de détails")
        sys.exit(1)

if __name__ == "__main__":
    main()
