#!/usr/bin/env python3
"""
🚨 ТЕСТ ИСПРАВЛЕНИЯ EMERGENCY ENDPOINTS
Проверяем работу мобильных endpoints после исправления SQLAlchemy
"""
import requests
import json

BASE_URL = "http://localhost:8002"

# Тестовый токен (временный для разработки)
TEST_TOKEN = "temp_token_123"

def test_emergency_endpoints():
    """Тестируем критические endpoints для мобильного приложения"""
    print("🧪 ТЕСТИРОВАНИЕ ИСПРАВЛЕНИЯ EMERGENCY ENDPOINTS")
    print("=" * 60)
    
    headers = {"Authorization": f"Bearer {TEST_TOKEN}"}
    
    # Список endpoints для проверки
    endpoints = [
        ("GET", "/api/v1/emergency/events", "Получить все события"),
        ("GET", "/api/v1/emergency/events/nearby", "Ближайшие события"),
        ("GET", "/api/v1/emergency/events/my", "Мои события"),
        ("GET", "/api/v1/websocket/stats", "WebSocket статистика"),
        ("GET", "/health", "Проверка здоровья"),
    ]
    
    results = []
    
    for method, endpoint, description in endpoints:
        print(f"\n🔍 Тестируем: {method} {endpoint}")
        print(f"   📝 {description}")
        
        try:
            if method == "GET":
                if endpoint == "/health":
                    # Health endpoint не требует авторизации
                    response = requests.get(f"{BASE_URL}{endpoint}", timeout=5)
                elif endpoint == "/api/v1/emergency/events/nearby":
                    # Добавляем параметры для nearby endpoint
                    params = {"latitude": 37.7749, "longitude": -122.4194, "radius": 1000}
                    response = requests.get(f"{BASE_URL}{endpoint}", headers=headers, params=params, timeout=5)
                else:
                    response = requests.get(f"{BASE_URL}{endpoint}", headers=headers, timeout=5)
                    
                # Анализируем ответ
                if response.status_code == 200:
                    print(f"   ✅ 200 OK - Endpoint работает полностью!")
                    results.append(("✅", endpoint, "200 OK", "Работает"))
                elif response.status_code == 401:
                    print(f"   ⚠️  401 Unauthorized - Endpoint существует, нужна авторизация")
                    results.append(("⚠️", endpoint, "401 Unauthorized", "Endpoint существует"))
                elif response.status_code == 403:
                    print(f"   ⚠️  403 Forbidden - Endpoint работает, нужны права доступа")
                    results.append(("⚠️", endpoint, "403 Forbidden", "Endpoint работает"))
                elif response.status_code == 404:
                    print(f"   ❌ 404 Not Found - Endpoint НЕ существует")
                    results.append(("❌", endpoint, "404 Not Found", "НЕ существует"))
                elif response.status_code == 500:
                    print(f"   🚨 500 Server Error - SQLAlchemy проблема НЕ исправлена")
                    results.append(("🚨", endpoint, "500 Server Error", "SQLAlchemy ошибка"))
                else:
                    print(f"   🔸 {response.status_code} - Неожиданный код ответа")
                    results.append(("🔸", endpoint, f"{response.status_code}", "Неожиданный код"))
                    
        except requests.exceptions.ConnectionError:
            print(f"   💀 CONNECTION ERROR - Сервис НЕ запущен на порту 8002")
            results.append(("💀", endpoint, "CONNECTION ERROR", "Сервис не запущен"))
        except Exception as e:
            print(f"   ⚡ ERROR: {str(e)}")
            results.append(("⚡", endpoint, "ERROR", str(e)))
    
    # Итоговый отчет
    print("\n" + "=" * 60)
    print("📊 ИТОГОВЫЙ ОТЧЕТ")
    print("=" * 60)
    
    working_count = sum(1 for r in results if r[0] in ["✅", "⚠️"])
    total_count = len(results)
    
    print(f"✅ Работающие endpoints: {working_count}/{total_count}")
    print()
    print("📋 Детали:")
    for status, endpoint, code, description in results:
        print(f"   {status} {code:<20} {endpoint}")
    
    print()
    print("🏆 РЕЗУЛЬТАТ ИСПРАВЛЕНИЯ:")
    if any(r[2] == "500 Server Error" for r in results):
        print("❌ SQLAlchemy проблема НЕ исправлена - все еще есть 500 ошибки")
    else:
        print("✅ SQLAlchemy проблема ИСПРАВЛЕНА - нет больше 500 ошибок!")
        
    if any(r[2] == "404 Not Found" for r in results if "emergency" in r[1]):
        print("❌ Мобильные endpoints НЕ работают - есть 404 ошибки")
    else:
        print("✅ Мобильные endpoints РАБОТАЮТ - нет 404 ошибок!")

if __name__ == "__main__":
    test_emergency_endpoints()