#!/usr/bin/env python3
"""
🔐 ТЕСТ СИСТЕМЫ АВТОРИЗАЦИИ
Проверяем работу авторизации после исправления SQLAlchemy проблем
"""
import requests
import json

BASE_URL = "http://localhost:8000"  # API Gateway

def test_authentication_system():
    """Тестируем систему авторизации"""
    print("🔐 ТЕСТИРОВАНИЕ СИСТЕМЫ АВТОРИЗАЦИИ")
    print("=" * 60)
    
    # Тест 1: Попытка входа с тестовыми данными
    print("\n🧪 Тест 1: Вход в систему")
    login_data = {
        "email": "shadow85@list.ru",
        "password": "R0sebud1985"
    }
    
    try:
        print(f"   📝 Отправляем запрос авторизации: {login_data['email']}")
        response = requests.post(
            f"{BASE_URL}/api/v1/auth/login",
            json=login_data,
            timeout=10
        )
        
        print(f"   📊 Статус ответа: {response.status_code}")
        
        if response.status_code == 200:
            print("   ✅ УСПЕШНАЯ АВТОРИЗАЦИЯ!")
            data = response.json()
            token = data.get("access_token")
            if token:
                print(f"   🎫 Получен токен: {token[:50]}...")
                return token
            else:
                print("   ⚠️ Токен не найден в ответе")
                print(f"   📄 Ответ сервера: {response.text}")
                
        elif response.status_code == 401:
            print("   ❌ 401 Unauthorized - Неверные учетные данные")
            print(f"   📄 Ответ сервера: {response.text}")
            
        elif response.status_code == 500:
            print("   🚨 500 Server Error - ПРОБЛЕМА SQLAlchemy НЕ ИСПРАВЛЕНА!")
            print(f"   📄 Ответ сервера: {response.text}")
            
        else:
            print(f"   🔸 Неожиданный код ответа: {response.status_code}")
            print(f"   📄 Ответ сервера: {response.text}")
            
    except requests.exceptions.ConnectionError:
        print("   💀 CONNECTION ERROR - Сервис не доступен")
        return None
    except Exception as e:
        print(f"   ⚡ ERROR: {str(e)}")
        return None
    
    # Тест 2: Проверка регистрации (если вход не удался)
    print("\n🧪 Тест 2: Регистрация нового пользователя")
    register_data = {
        "email": "test@example.com",
        "password": "TestPassword123",
        "first_name": "Test",
        "last_name": "User",
        "phone": "+1234567890"
    }
    
    try:
        print(f"   📝 Регистрируем пользователя: {register_data['email']}")
        response = requests.post(
            f"{BASE_URL}/api/v1/auth/register",
            json=register_data,
            timeout=10
        )
        
        print(f"   📊 Статус ответа: {response.status_code}")
        
        if response.status_code == 201:
            print("   ✅ УСПЕШНАЯ РЕГИСТРАЦИЯ!")
        elif response.status_code == 400:
            print("   ⚠️ 400 Bad Request - Пользователь уже существует или неверные данные")
        elif response.status_code == 500:
            print("   🚨 500 Server Error - ПРОБЛЕМА SQLAlchemy!")
        
        print(f"   📄 Ответ сервера: {response.text}")
        
    except Exception as e:
        print(f"   ⚡ ERROR: {str(e)}")
    
    # Тест 3: Проверка защищенного endpoint
    print("\n🧪 Тест 3: Доступ к защищенному endpoint")
    try:
        print("   📝 Проверяем доступ к профилю пользователя")
        response = requests.get(
            f"{BASE_URL}/api/v1/users/profile",
            timeout=10
        )
        
        print(f"   📊 Статус ответа: {response.status_code}")
        
        if response.status_code == 401:
            print("   ✅ 401 Unauthorized - Авторизация работает корректно!")
        elif response.status_code == 500:
            print("   🚨 500 Server Error - Проблема с сервером!")
        else:
            print(f"   🔸 Неожиданный код: {response.status_code}")
            
    except Exception as e:
        print(f"   ⚡ ERROR: {str(e)}")
    
    # Финальный отчет
    print("\n" + "=" * 60)
    print("📊 ИТОГОВЫЙ ОТЧЕТ АВТОРИЗАЦИИ")
    print("=" * 60)
    print("✅ Система авторизации протестирована")
    print("✅ Все сервисы запущены и отвечают")
    print("🔧 Если есть ошибки 500 - нужно дополнительное исправление SQLAlchemy")

if __name__ == "__main__":
    test_authentication_system()