#!/usr/bin/env python3
"""
Script rápido para probar la nueva feature de generación de códigos SOAT con Gemini
"""

import requests
import json
from datetime import datetime

# Configuración
BASE_URL = "http://localhost:7000"
USERNAME = "admin"  # Cambiar por tu usuario
PASSWORD = "admin"  # Cambiar por tu contraseña

def obtener_token():
    """Obtiene token de autenticación"""
    print("🔐 Obteniendo token de autenticación...")
    
    try:
        response = requests.post(
            f"{BASE_URL}/token",
            data={"username": USERNAME, "password": PASSWORD}
        )
        
        if response.status_code == 200:
            token = response.json().get("access_token")
            print(f"✅ Token obtenido: {token[:20]}...")
            return token
        else:
            print(f"❌ Error en login: {response.text}")
            return None
            
    except Exception as e:
        print(f"❌ Error de conexión: {e}")
        return None

def probar_generacion_codigos(token):
    """Prueba la generación de códigos CIE-10 y CUPS"""
    print("\n🧪 Probando generación de códigos SOAT con Gemini...")
    
    # Datos de prueba
    payload = {
        "descripciones": [
            {
                "codigo_soat": "90201",
                "descripcion": "Reducción cerrada de fractura de radio distal"
            },
            {
                "codigo_soat": "90305", 
                "descripcion": "Inmovilización con yeso braquipalmar"
            }
        ]
    }
    
    headers = {
        "Authorization": f"Bearer {token}",
        "Content-Type": "application/json"
    }
    
    try:
        print("📤 Enviando request...")
        print(json.dumps(payload, indent=2, ensure_ascii=False))
        
        response = requests.post(
            f"{BASE_URL}/soat/generar_codigos_gemini",
            json=payload,
            headers=headers
        )
        
        print(f"\n📊 Status Code: {response.status_code}")
        
        if response.status_code == 200:
            data = response.json()
            print("\n✅ RESPUESTA EXITOSA")
            print("=" * 60)
            print(f"Mensaje: {data.get('mensaje')}")
            print(f"Total procesados: {data.get('total_procesados')}")
            print(f"Modelo usado: {data.get('modelo_usado')}")
            
            print("\n📋 RESULTADOS:")
            print("=" * 60)
            
            for i, resultado in enumerate(data.get('resultados', []), 1):
                print(f"\nRESULTADO #{i}:")
                print(f"  🔖 Código SOAT: {resultado.get('codigo_soat')}")
                print(f"  📝 Descripción: {resultado.get('descripcion')}")
                
                # CIE-10 Principal
                cie10_principal = resultado.get('cie10_principal')
                if cie10_principal:
                    print(f"  🏥 CIE-10 Principal: {cie10_principal.get('codigo')} - {cie10_principal.get('descripcion')}")
                
                # CUPS Principal
                cups_principal = resultado.get('cups_principal')
                if cups_principal:
                    print(f"  🔧 CUPS Principal: {cups_principal.get('codigo')} - {cups_principal.get('descripcion')}")
                
                # Contadores
                cie10_sec = len(resultado.get('cie10_secundarios', []))
                cups_alt = len(resultado.get('cups_alternativos', []))
                print(f"  📋 CIE-10 Secundarios: {cie10_sec}")
                print(f"  ⚙️ CUPS Alternativos: {cups_alt}")
            
            # Guardar resultado completo
            with open('test_resultado_gemini.json', 'w', encoding='utf-8') as f:
                json.dump(data, f, indent=2, ensure_ascii=False)
            print(f"\n💾 Resultado completo guardado en: test_resultado_gemini.json")
            
            return True
            
        else:
            print(f"\n❌ ERROR EN LA RESPUESTA")
            print(response.text)
            return False
            
    except Exception as e:
        print(f"\n❌ ERROR: {e}")
        return False

def verificar_servidor():
    """Verifica que el servidor esté corriendo"""
    print("🔍 Verificando servidor...")
    
    try:
        response = requests.get(f"{BASE_URL}/", timeout=5)
        print("✅ Servidor está corriendo")
        return True
    except Exception as e:
        print(f"❌ Servidor no disponible: {e}")
        print("💡 Asegúrate de que el servidor esté corriendo:")
        print("   python -m uvicorn app.main_CIE10:app --host 0.0.0.0 --port 7000 --reload")
        return False

def main():
    print("╔════════════════════════════════════════════════════════════════════╗")
    print("║  PRUEBA RÁPIDA - GENERACIÓN DE CÓDIGOS SOAT CON GEMINI            ║")
    print("╚════════════════════════════════════════════════════════════════════╝")
    print(f"🕐 {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
    print()
    
    # Verificar servidor
    if not verificar_servidor():
        return
    
    # Obtener token
    token = obtener_token()
    if not token:
        return
    
    # Probar generación
    exito = probar_generacion_codigos(token)
    
    print("\n" + "=" * 60)
    if exito:
        print("🎉 PRUEBA COMPLETADA EXITOSAMENTE")
        print("\n📝 Próximos pasos:")
        print("1. Revisa el archivo test_resultado_gemini.json")
        print("2. Ve a la epicrisis de un paciente para probar la interfaz")
        print("3. Verifica que GEMINI_API_KEY esté configurada")
    else:
        print("❌ PRUEBA FALLÓ")
        print("\n🔧 Posibles soluciones:")
        print("1. Verificar que GEMINI_API_KEY esté configurada")
        print("2. Revisar logs del servidor")
        print("3. Verificar conectividad a internet")

if __name__ == "__main__":
    main()
