#!/usr/bin/env python3
"""
Script de pruebas para el prototipo del sistema de evaluación con IA
"""

import json
from src.data_ingestion import ingest_data
from src.question_generation import QuestionGenerator
from src.grading import Grader

def test_data_ingestion():
    """Prueba el módulo de ingesta de datos"""
    print("\n=== Prueba de Ingesta de Datos ===")
    
    # Crear archivo de prueba
    test_content = """
    La inteligencia artificial (IA) es una rama de la informática que se ocupa de la creación de sistemas 
    capaces de realizar tareas que típicamente requieren inteligencia humana. Estas tareas incluyen el 
    reconocimiento de patrones, el aprendizaje, la resolución de problemas y la toma de decisiones.
    
    Los algoritmos de aprendizaje automático son un subconjunto de la IA que permite a las máquinas 
    aprender y mejorar automáticamente a partir de la experiencia sin ser programadas explícitamente 
    para cada tarea específica.
    """
    
    with open('data/test_content.txt', 'w', encoding='utf-8') as f:
        f.write(test_content)
    
    # Probar ingesta
    content, error = ingest_data('data/test_content.txt')
    
    if content:
        print("✓ Ingesta de datos exitosa")
        print(f"Contenido extraído: {len(content)} caracteres")
        return content
    else:
        print(f"✗ Error en ingesta de datos: {error}")
        return None

def test_question_generation(content):
    """Prueba el módulo de generación de preguntas"""
    print("\n=== Prueba de Generación de Preguntas ===")
    
    try:
        generator = QuestionGenerator()
        
        # Probar pregunta de opción múltiple
        print("Generando pregunta de opción múltiple...")
        mc_question = generator.generate_question(content, "multiple_choice", "medium")
        
        if mc_question:
            print("✓ Pregunta de opción múltiple generada exitosamente")
            mc_data = json.loads(mc_question)
            print(f"Pregunta: {mc_data.get('question')}")
            return mc_data
        else:
            print("✗ Error generando pregunta de opción múltiple")
            return None
            
    except ValueError as e:
        print(f"✗ Error: {e}")
        print("Nota: Para probar completamente, configura OPENAI_API_KEY")
        
        # Crear pregunta de prueba manual
        test_question = {
            "question": "¿Qué es la inteligencia artificial?",
            "type": "multiple_choice",
            "difficulty": "medium",
            "options": [
                "Una rama de la biología",
                "Una rama de la informática que crea sistemas inteligentes",
                "Un tipo de robot",
                "Un lenguaje de programación"
            ],
            "correct_answer": "Una rama de la informática que crea sistemas inteligentes"
        }
        print("✓ Usando pregunta de prueba manual")
        return test_question

def test_grading(question_data):
    """Prueba el módulo de calificación"""
    print("\n=== Prueba de Calificación ===")
    
    grader = Grader()
    
    # Probar respuesta correcta
    correct_answer = question_data.get('correct_answer')
    result_correct = grader.grade_question(question_data, correct_answer)
    
    if result_correct['is_correct']:
        print("✓ Calificación de respuesta correcta: EXITOSA")
    else:
        print("✗ Calificación de respuesta correcta: FALLÓ")
    
    # Probar respuesta incorrecta
    if question_data.get('type') == 'multiple_choice' and question_data.get('options'):
        # Usar una opción incorrecta
        wrong_answer = None
        for option in question_data['options']:
            if option != correct_answer:
                wrong_answer = option
                break
        
        if wrong_answer:
            result_incorrect = grader.grade_question(question_data, wrong_answer)
            if not result_incorrect['is_correct']:
                print("✓ Calificación de respuesta incorrecta: EXITOSA")
            else:
                print("✗ Calificación de respuesta incorrecta: FALLÓ")
    
    return True

def test_integration():
    """Prueba de integración completa"""
    print("\n=== Prueba de Integración ===")
    
    # 1. Ingesta de datos
    content = test_data_ingestion()
    if not content:
        return False
    
    # 2. Generación de preguntas
    question_data = test_question_generation(content)
    if not question_data:
        return False
    
    # 3. Calificación
    grading_success = test_grading(question_data)
    if not grading_success:
        return False
    
    print("\n✓ Prueba de integración EXITOSA")
    return True

def main():
    """Función principal de pruebas"""
    print("Iniciando pruebas del prototipo...")
    
    # Crear directorio de datos si no existe
    import os
    os.makedirs('data', exist_ok=True)
    
    # Ejecutar pruebas
    success = test_integration()
    
    if success:
        print("\n🎉 Todas las pruebas pasaron exitosamente!")
        print("\nEl prototipo está listo para demostración.")
        print("Para ejecutar la aplicación web, ejecuta: python app.py")
    else:
        print("\n❌ Algunas pruebas fallaron.")
        print("Revisa los errores anteriores.")

if __name__ == '__main__':
    main()

