"""
Déblocage manuel d'un pack de billes suite à un paiement Stripe
"""
import mysql.connector
from python.db_config import DB_CONFIG

def unlock_stripe_pack(session_id: str):
    """Débloquer un pack suite à un paiement Stripe"""
    conn = mysql.connector.connect(**DB_CONFIG)
    cursor = conn.cursor(dictionary=True)
    
    try:
        # Récupérer la transaction
        cursor.execute("""
            SELECT * FROM payment_transactions 
            WHERE stripe_session_id = %s
            ORDER BY created_at DESC
            LIMIT 1
        """, (session_id,))
        
        transaction = cursor.fetchone()
        
        if not transaction:
            print(f"❌ Transaction introuvable: {session_id}")
            return False
        
        print(f"✅ Transaction trouvée:")
        print(f"   User ID: {transaction['user_id']}")
        print(f"   Pack ID: {transaction['pack_id']}")
        print(f"   Pack Type: {transaction['pack_type']}")
        print(f"   Status: {transaction['status']}")
        
        user_id = transaction['user_id']
        pack_id = transaction['pack_id']
        pack_type = transaction['pack_type']
        
        # Débloquer selon le type
        if pack_type == 'ball_skin':
            # Vérifier si déjà débloqué
            cursor.execute("""
                SELECT * FROM user_ball_skin_packs
                WHERE user_id = %s AND pack_id = %s
            """, (user_id, pack_id))
            
            if cursor.fetchone():
                print(f"⚠️  Pack déjà débloqué")
                return False
            
            # Récupérer les détails du pack
            cursor.execute("""
                SELECT * FROM ball_skin_packs
                WHERE pack_id = %s
            """, (pack_id,))
            
            pack = cursor.fetchone()
            
            if not pack:
                print(f"❌ Pack introuvable dans ball_skin_packs: {pack_id}")
                return False
            
            # Débloquer le pack
            cursor.execute("""
                INSERT INTO user_ball_skin_packs (user_id, pack_id, purchased_at, price_paid)
                VALUES (%s, %s, NOW(), %s)
            """, (user_id, pack_id, transaction['amount']))
            
            print(f"🎉 Pack de billes '{pack['name']}' débloqué!")
            
        elif pack_type == 'avatar':
            # Vérifier si déjà débloqué
            cursor.execute("""
                SELECT * FROM user_avatar_packs
                WHERE user_id = %s AND pack_id = %s
            """, (user_id, pack_id))
            
            if cursor.fetchone():
                print(f"⚠️  Pack déjà débloqué")
                return False
            
            # Débloquer le pack
            cursor.execute("""
                INSERT INTO user_avatar_packs (user_id, pack_id, purchased_at, price_paid)
                VALUES (%s, %s, NOW(), %s)
            """, (user_id, pack_id, transaction['amount']))
            
            print(f"🎉 Pack d'avatars débloqué!")
        
        elif pack_type == 'cash':
            print(f"💰 Pack cash - crédits déjà ajoutés normalement")
        
        # Marquer la transaction comme complétée
        cursor.execute("""
            UPDATE payment_transactions
            SET status = 'completed', updated_at = NOW()
            WHERE id = %s
        """, (transaction['id'],))
        
        # Note: wallet_history est pour les ressources en jeu (points, hints, undos)
        # Les packs ne nécessitent pas d'entrée dans wallet_history
        
        conn.commit()
        
        print(f"\n✅ Transaction marquée comme 'completed'")
        
        return True
        
    except Exception as e:
        print(f"❌ Erreur: {e}")
        conn.rollback()
        return False
    
    finally:
        cursor.close()
        conn.close()

if __name__ == "__main__":
    session_id = "cs_live_a1X9JO1YNYIbRzh5W2VWLwYHk9VYortxzZhbvYtHckPazAly9wtYkK0STB"
    print(f"🔓 Déblocage du pack pour la session: {session_id[:30]}...\n")
    
    if unlock_stripe_pack(session_id):
        print(f"\n✅ Pack débloqué avec succès!")
        print(f"\n💡 Le joueur doit se reconnecter pour voir le pack.")
    else:
        print(f"\n⚠️  Échec du déblocage")
