#!/usr/bin/env python3
"""Accorde rétroactivement les avatars beta testeur aux comptes existants créés pendant la période beta"""

import mysql.connector
from datetime import datetime, timedelta
from python.db_config import DB_CONFIG

conn = mysql.connector.connect(**DB_CONFIG)
cursor = conn.cursor(dictionary=True)

print("=" * 70)
print("ATTRIBUTION RÉTROACTIVE DES AVATARS BETA TESTEUR")
print("=" * 70)

# 1. Récupérer la date de lancement
cursor.execute("""
    SELECT config_value FROM app_config 
    WHERE config_key = 'launch_date'
""")
launch_config = cursor.fetchone()

if not launch_config:
    print("\n❌ ERREUR : Date de lancement non trouvée dans app_config")
    cursor.close()
    conn.close()
    exit(1)

launch_date_str = launch_config['config_value']
launch_date = datetime.fromisoformat(launch_date_str.replace('Z', '+00:00'))
# Convertir en naive datetime pour comparaisons
launch_date_naive = launch_date.replace(tzinfo=None) if launch_date.tzinfo else launch_date
beta_end_date = launch_date_naive + timedelta(days=30)

print(f"\n📅 Date de lancement : {launch_date_naive.strftime('%Y-%m-%d %H:%M:%S')}")
print(f"📅 Fin période beta : {beta_end_date.strftime('%Y-%m-%d %H:%M:%S')}")

# 2. Récupérer les avatars beta testeur
cursor.execute("""
    SELECT id, code, file_path 
    FROM avatars 
    WHERE code LIKE 'beta-testeur%'
    ORDER BY code
""")
beta_avatars = cursor.fetchall()

if not beta_avatars:
    print("\n❌ ERREUR : Aucun avatar beta testeur trouvé dans la base")
    print("⚠️  Exécutez d'abord add_beta_tester_avatars.py")
    cursor.close()
    conn.close()
    exit(1)

print(f"\n🎨 Avatars beta testeur trouvés ({len(beta_avatars)}) :")
for avatar in beta_avatars:
    print(f"  - {avatar['code']} (ID: {avatar['id']}) -> {avatar['file_path']}")

# 3. Récupérer les utilisateurs créés pendant la période beta
cursor.execute("""
    SELECT id, email, display_name, created_at 
    FROM users 
    WHERE created_at <= %s
    ORDER BY created_at
""", (beta_end_date,))
eligible_users = cursor.fetchall()

print(f"\n👥 Utilisateurs éligibles créés pendant la période beta ({len(eligible_users)}) :")
for user in eligible_users:
    created_at = user['created_at']
    if isinstance(created_at, str):
        created_at = datetime.fromisoformat(created_at.replace('Z', '+00:00'))
    # Rendre les deux datetimes comparables (enlever timezone si nécessaire)
    created_at_naive = created_at.replace(tzinfo=None) if created_at.tzinfo else created_at
    days_after_launch = (created_at_naive - launch_date_naive).days
    print(f"  - {user['display_name']} ({user['email']}) - J+{days_after_launch}")

# 4. Attribution des avatars
print("\n" + "=" * 70)
print("ATTRIBUTION DES AVATARS")
print("=" * 70)

total_granted = 0

for user in eligible_users:
    user_id = user['id']
    user_name = user['display_name']
    granted = 0
    
    print(f"\n--- {user_name} (ID: {user_id}) ---")
    
    for avatar in beta_avatars:
        avatar_id = avatar['id']
        avatar_code = avatar['code']
        
        # Vérifier si l'utilisateur a déjà cet avatar
        cursor.execute("""
            SELECT 1 FROM user_avatars 
            WHERE user_id = %s AND avatar_id = %s
        """, (user_id, avatar_id))
        
        if cursor.fetchone():
            print(f"  ⚪ {avatar_code} : déjà possédé")
        else:
            # Insérer l'avatar
            cursor.execute("""
                INSERT INTO user_avatars (user_id, avatar_id, source, metadata, unlocked_at)
                VALUES (%s, %s, 'beta_tester', '{"retroactive": true}', NOW())
            """, (user_id, avatar_id))
            print(f"  ✅ {avatar_code} : accordé")
            granted += 1
            total_granted += 1
    
    if granted == 0:
        print(f"  ℹ️  Aucun nouvel avatar à accorder")

# 5. Commit et résumé
conn.commit()

print("\n" + "=" * 70)
print("RÉSUMÉ")
print("=" * 70)
print(f"✅ {total_granted} avatar(s) accordé(s) au total")
print(f"👥 {len(eligible_users)} utilisateur(s) traité(s)")
print(f"🎨 {len(beta_avatars)} avatar(s) beta testeur disponible(s)")

cursor.close()
conn.close()

print("\n✨ Migration terminée avec succès !")
