#!/usr/bin/env python3
"""
Test script for the demo functionality
"""

from demo_page import initialize_models, detect_with_all_models, create_results_dataframe, run_demo_tests, DEMO_SAMPLES

def test_model_initialization():
    """Test that all models can be initialized."""
    print("🔄 Testing model initialization...")
    models = initialize_models()
    
    print(f"✅ Initialized {len(models)} models:")
    for model_key, model_info in models.items():
        status_icon = "✅" if model_info["status"] == "Ready" else "❌"
        print(f"  {status_icon} {model_info['name']}: {model_info['status']}")
    
    return models

def test_single_detection():
    """Test detection with a single text across all models."""
    print("\n🔄 Testing single text detection...")
    
    models = initialize_models()
    test_text = "Hello, how are you today?"
    
    results = detect_with_all_models(test_text, models)
    
    print(f"Text: '{test_text}'")
    print("Results:")
    for model_key, result in results.items():
        print(f"  {model_key}: {result['language_code']} ({result['confidence']:.3f}) - {result['status']}")
    
    return results

def test_category_samples():
    """Test a few samples from each category."""
    print("\n🔄 Testing category samples...")
    
    models = initialize_models()
    
    for category, samples in DEMO_SAMPLES.items():
        print(f"\n📊 Category: {category}")
        # Test first sample from each category
        text, expected, description = samples[0]
        results = detect_with_all_models(text, models)
        
        print(f"  Text: '{text}' (Expected: {expected})")
        print(f"  Description: {description}")
        for model_key, result in results.items():
            match_icon = "✅" if result['language_code'] == expected or expected in ['ambiguous', 'mix', 'transliteration'] else "❌"
            print(f"    {model_key}: {result['language_code']} ({result['confidence']:.3f}) {match_icon}")

def test_dataframe_creation():
    """Test DataFrame creation with sample data."""
    print("\n🔄 Testing DataFrame creation...")
    
    models = initialize_models()
    
    # Test with a few samples
    test_texts = [
        "Hello world",
        "Bonjour le monde", 
        "Hola mundo"
    ]
    expected_langs = ["en", "fr", "es"]
    categories = ["Custom", "Custom", "Custom"]
    
    all_results = []
    for text in test_texts:
        results = detect_with_all_models(text, models)
        all_results.append(results)
    
    df = create_results_dataframe(test_texts, all_results, expected_langs, categories)
    
    print("DataFrame shape:", df.shape)
    print("Columns:", list(df.columns))
    print("\nFirst few rows:")
    print(df.head())
    
    return df

def test_demo_workflow():
    """Test the complete demo workflow."""
    print("\n🔄 Testing complete demo workflow...")
    
    models = initialize_models()
    
    # Test with selected categories and custom text
    selected_categories = ["Easy/Obvious", "Short Text"]
    custom_texts = "Hello world\nBonjour\n你好"
    
    summary, df = run_demo_tests(selected_categories, custom_texts, models)
    
    print(f"Summary: {summary}")
    if df is not None:
        print(f"Results DataFrame shape: {df.shape}")
        print("Sample results:")
        print(df.head())
    else:
        print("❌ No DataFrame returned")
    
    return summary, df

def main():
    """Run all tests."""
    print("🚀 Starting demo functionality tests...\n")
    
    try:
        # Test 1: Model initialization
        models = test_model_initialization()
        
        # Test 2: Single detection
        single_results = test_single_detection()
        
        # Test 3: Category samples
        test_category_samples()
        
        # Test 4: DataFrame creation
        df = test_dataframe_creation()
        
        # Test 5: Complete workflow
        summary, demo_df = test_demo_workflow()
        
        print("\n✅ All tests completed successfully!")
        print(f"📊 Total categories available: {len(DEMO_SAMPLES)}")
        print(f"📝 Total sample texts: {sum(len(samples) for samples in DEMO_SAMPLES.values())}")
        
    except Exception as e:
        print(f"\n❌ Test failed with error: {e}")
        import traceback
        traceback.print_exc()

if __name__ == "__main__":
    main()