#!/usr/bin/env python3
"""
🧹 Script de Nettoyage des Données Utilisateur

Supprime le champ 'subscription_tier' des données utilisateur dans la base
pour éviter l'erreur de désérialisation avec le modèle User.
"""

import sys
import json
import sqlite3
from pathlib import Path

# Ajouter le chemin vers Web Sentinel
sys.path.insert(0, str(Path(__file__).parent.parent))
sys.path.insert(0, str(Path(__file__).parent))

from real_db_connector import RealDatabaseConnector

def clean_user_data():
    """Nettoyer les données utilisateur pour supprimer les champs non reconnus."""
    print("🧹 NETTOYAGE DES DONNÉES UTILISATEUR")
    print("=" * 50)
    
    connector = RealDatabaseConnector()
    
    try:
        with sqlite3.connect(connector.auth_db_path) as conn:
            # Récupérer tous les utilisateurs
            cursor = conn.execute("SELECT id, email, data FROM users")
            users = cursor.fetchall()
            
            for user_id, email, user_data_str in users:
                user_data = json.loads(user_data_str)
                
                # Vérifier si le champ problématique existe
                if 'subscription_tier' in user_data:
                    print(f"🔧 Nettoyage utilisateur {email}...")
                    print(f"   Suppression du champ 'subscription_tier': {user_data['subscription_tier']}")
                    
                    # Supprimer le champ problématique
                    del user_data['subscription_tier']
                    
                    # Mettre à jour les données
                    conn.execute("""
                        UPDATE users 
                        SET data = ?, updated_at = CURRENT_TIMESTAMP
                        WHERE id = ?
                    """, (json.dumps(user_data), user_id))
                    
                    print(f"   ✅ Données nettoyées pour {email}")
                else:
                    print(f"✅ Utilisateur {email} - pas de nettoyage nécessaire")
            
            conn.commit()
            print(f"\n✅ NETTOYAGE TERMINÉ")
            print(f"Les utilisateurs peuvent maintenant se connecter normalement.")
            
    except Exception as e:
        print(f"❌ Erreur lors du nettoyage: {e}")

def verify_cleanup():
    """Vérifier que le nettoyage a bien fonctionné."""
    print(f"\n🔍 VÉRIFICATION DU NETTOYAGE")
    print("=" * 40)
    
    connector = RealDatabaseConnector()
    user_info = connector.get_user_info('bruno@taaazzz-prog.fr')
    
    if user_info:
        user_data = user_info['user_data']
        
        print(f"👤 Utilisateur: {user_info['email']}")
        print(f"🎫 Tier en base subscriptions: {user_info['subscription_tier']}")
        
        if 'subscription_tier' in user_data:
            print(f"❌ PROBLÈME: Le champ 'subscription_tier' existe encore dans les données utilisateur")
            return False
        else:
            print(f"✅ OK: Pas de champ 'subscription_tier' dans les données utilisateur")
            
        # Tester la désérialisation
        try:
            from web_sentinel.auth.models import User
            # Simuler la désérialisation comme le fait Web Sentinel
            user_obj = User(**user_data)
            print(f"✅ OK: Désérialisation réussie - {user_obj.email}")
            return True
        except Exception as e:
            print(f"❌ ERREUR: Désérialisation échoue encore - {e}")
            return False
    else:
        print(f"❌ Utilisateur bruno@taaazzz-prog.fr non trouvé")
        return False

if __name__ == "__main__":
    clean_user_data()
    verify_cleanup()