#!/usr/bin/env python3
"""
Script de test de connexion à MariaDB
Usage: python scripts/test_mariadb_connection.py
"""

import os
import sys
from pathlib import Path
from dotenv import load_dotenv

# Charger le .env
BASE_DIR = Path(__file__).resolve().parent.parent
load_dotenv(BASE_DIR / '.env')

def test_import():
    """Tester l'import de MySQLdb"""
    print("🔍 Test 1 : Import du module MySQLdb...")
    try:
        import MySQLdb
        print("   ✅ MySQLdb importé avec succès")
        return True
    except ImportError as e:
        print(f"   ❌ Erreur d'import: {e}")
        print("   💡 Installez mysqlclient: pip install mysqlclient")
        return False

def test_connection():
    """Tester la connexion à MariaDB"""
    print("\n🔍 Test 2 : Connexion à MariaDB...")
    
    # Récupérer les paramètres depuis .env
    db_host = os.getenv('DB_HOST', 'localhost')
    db_port = int(os.getenv('DB_PORT', '3306'))
    db_user = os.getenv('DB_USER', 'root')
    db_password = os.getenv('DB_PASSWORD', '')
    db_name = os.getenv('DB_NAME', 'duhaz_blog')
    
    print(f"   Paramètres de connexion:")
    print(f"   - Hôte: {db_host}")
    print(f"   - Port: {db_port}")
    print(f"   - Utilisateur: {db_user}")
    print(f"   - Base: {db_name}")
    print()
    
    try:
        import MySQLdb
        conn = MySQLdb.connect(
            host=db_host,
            port=db_port,
            user=db_user,
            passwd=db_password,
            db=db_name
        )
        print("   ✅ Connexion établie avec succès!")
        
        # Tester une requête
        cursor = conn.cursor()
        cursor.execute("SELECT VERSION()")
        version = cursor.fetchone()
        print(f"   📊 Version MariaDB: {version[0]}")
        
        cursor.execute("SELECT DATABASE()")
        current_db = cursor.fetchone()
        print(f"   📂 Base de données active: {current_db[0]}")
        
        cursor.close()
        conn.close()
        return True
        
    except Exception as e:
        print(f"   ❌ Erreur de connexion: {e}")
        print()
        print("   💡 Vérifications à faire:")
        print("      1. Le conteneur MariaDB est-il démarré?")
        print("         docker ps | grep mariadb")
        print("      2. Le port est-il exposé?")
        print("         docker port mariadb")
        print("      3. Pouvez-vous pinguer l'hôte?")
        print(f"         ping {db_host}")
        print("      4. Le port est-il accessible?")
        print(f"         telnet {db_host} {db_port}")
        return False

def test_django_connection():
    """Tester la connexion via Django"""
    print("\n🔍 Test 3 : Connexion via Django...")
    
    # Vérifier que DB_ENGINE est bien configuré
    db_engine = os.getenv('DB_ENGINE', 'sqlite3')
    if db_engine != 'mysql':
        print(f"   ⚠️  DB_ENGINE={db_engine} (devrait être 'mysql')")
        print("   💡 Modifiez votre .env: DB_ENGINE=mysql")
        return False
    
    try:
        # Setup Django
        os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'duhaz_blog.settings')
        import django
        django.setup()
        
        from django.db import connection
        with connection.cursor() as cursor:
            cursor.execute("SELECT VERSION()")
            version = cursor.fetchone()
            print(f"   ✅ Django connecté à MariaDB {version[0]}")
        
        return True
    except Exception as e:
        print(f"   ❌ Erreur Django: {e}")
        return False

def main():
    print("=" * 60)
    print("🧪 Test de connexion MariaDB")
    print("=" * 60)
    print()
    
    # Test 1: Import
    if not test_import():
        return 1
    
    # Test 2: Connexion directe
    if not test_connection():
        return 1
    
    # Test 3: Connexion via Django
    if not test_django_connection():
        return 1
    
    print("\n" + "=" * 60)
    print("✅ Tous les tests sont passés!")
    print("=" * 60)
    print()
    print("Vous pouvez maintenant lancer la migration:")
    print("  python scripts/migrate_to_mariadb.py")
    print()
    
    return 0

if __name__ == '__main__':
    sys.exit(main())
