#!/usr/bin/env python3
"""
Script de migration de SQLite vers MariaDB
Usage: python scripts/migrate_to_mariadb.py
"""

import os
import sys
import django
from pathlib import Path

# Ajouter le répertoire parent au path
BASE_DIR = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(BASE_DIR))

# Setup Django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'duhaz_blog.settings')
django.setup()

from django.core.management import call_command
from django.conf import settings
import subprocess

def export_sqlite_data():
    """Exporter les données de SQLite"""
    print("📤 Export des données depuis SQLite...")
    
    # Créer un dossier pour les dumps
    dump_dir = BASE_DIR / 'backup'
    dump_dir.mkdir(exist_ok=True)
    
    dump_file = dump_dir / 'sqlite_data.json'
    
    # Exporter toutes les données
    call_command('dumpdata', 
                 '--natural-foreign',
                 '--natural-primary',
                 '--exclude=contenttypes',
                 '--exclude=auth.permission',
                 '--indent=2',
                 '--output', str(dump_file))
    
    print(f"✅ Données exportées vers {dump_file}")
    return dump_file

def import_to_mariadb(dump_file):
    """Importer les données dans MariaDB"""
    print("\n📥 Import des données dans MariaDB...")
    
    # S'assurer que nous utilisons bien MariaDB
    if settings.DATABASES['default']['ENGINE'] != 'django.db.backends.mysql':
        print("❌ Erreur: La configuration n'utilise pas MariaDB!")
        print(f"   Moteur actuel: {settings.DATABASES['default']['ENGINE']}")
        print("   Vérifiez votre fichier .env (DB_ENGINE=mysql)")
        return False
    
    # Créer les tables
    print("🔧 Création des tables...")
    call_command('migrate', '--run-syncdb')
    
    # Importer les données
    print("📊 Import des données...")
    call_command('loaddata', str(dump_file))
    
    print("✅ Données importées avec succès!")
    return True

def verify_migration():
    """Vérifier la migration"""
    print("\n🔍 Vérification de la migration...")
    
    from django.contrib.auth.models import User
    from blog.models import Article
    
    user_count = User.objects.count()
    article_count = Article.objects.count()
    
    print(f"   👥 Utilisateurs: {user_count}")
    print(f"   📝 Articles: {article_count}")
    
    return True

def main():
    print("=" * 60)
    print("🚀 Migration SQLite → MariaDB")
    print("=" * 60)
    
    # Vérifier que nous sommes bien en SQLite avant l'export
    if settings.DATABASES['default']['ENGINE'] != 'django.db.backends.sqlite3':
        print("⚠️  Attention: Vous n'êtes pas en mode SQLite!")
        print(f"   Moteur actuel: {settings.DATABASES['default']['ENGINE']}")
        response = input("   Voulez-vous continuer quand même? (o/N): ")
        if response.lower() != 'o':
            print("❌ Migration annulée")
            return
    
    try:
        # Étape 1: Export SQLite
        dump_file = export_sqlite_data()
        
        print("\n" + "=" * 60)
        print("⚠️  IMPORTANT: Maintenant, modifiez votre fichier .env")
        print("=" * 60)
        print("Changez DB_ENGINE de 'sqlite3' à 'mysql'")
        print("Vérifiez que les paramètres DB_NAME, DB_USER, etc. sont corrects")
        print()
        input("Appuyez sur Entrée quand c'est fait...")
        
        # Recharger Django avec la nouvelle config
        from importlib import reload
        import duhaz_blog.settings
        reload(duhaz_blog.settings)
        
        # Étape 2: Import MariaDB
        if import_to_mariadb(dump_file):
            # Étape 3: Vérification
            verify_migration()
            
            print("\n" + "=" * 60)
            print("✅ Migration terminée avec succès!")
            print("=" * 60)
            print("\n📋 Prochaines étapes:")
            print("   1. Testez votre application")
            print("   2. Vérifiez que toutes les données sont présentes")
            print("   3. Une fois confirmé, vous pouvez supprimer db.sqlite3")
            print(f"   4. Gardez le backup: {dump_file}")
        else:
            print("\n❌ La migration a échoué")
            
    except Exception as e:
        print(f"\n❌ Erreur lors de la migration: {e}")
        import traceback
        traceback.print_exc()
        return 1
    
    return 0

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