import mysql.connector
from python.db_config import DB_CONFIG
import json

SESSION_ID = 'cs_live_a1X9JO1YNYIbRzh5W2VWLwYHk9VYortxzZhbvYtHckPazAly9wtYkK0STB'

def parse_skin_ids(value):
    """Parse skin_ids depuis la DB (peut être JSON array ou string CSV)"""
    if isinstance(value, list):
        return [str(v) for v in value if v]
    if isinstance(value, str) and value.strip():
        try:
            parsed = json.loads(value)
            if isinstance(parsed, list):
                return [str(v) for v in parsed if v]
        except:
            return [v.strip() for v in value.split(',') if v.strip()]
    return []

def unlock_pack():
    """Débloquer le pack acheté via Stripe (RÉPLICATION EXACTE du webhook)"""
    conn = mysql.connector.connect(**DB_CONFIG)
    cursor = conn.cursor(dictionary=True)
    
    try:
        print(f"🔓 Déblocage du pack pour la session: {SESSION_ID[:50]}...\n")
        
        # 1. Récupérer la transaction
        cursor.execute("""
            SELECT * FROM payment_transactions 
            WHERE stripe_session_id = %s
        """, (SESSION_ID,))
        
        transaction = cursor.fetchone()
        if not transaction:
            print("❌ Transaction non trouvée")
            return False
        
        user_id = transaction['user_id']
        pack_id = transaction['pack_id']
        pack_type = transaction['pack_type']
        
        print(f"✅ Transaction trouvée:")
        print(f"   User ID: {user_id}")
        print(f"   Pack ID: {pack_id}")
        print(f"   Pack Type: {pack_type}")
        print(f"   Status: {transaction['status']}\n")
        
        # 2. Traitement selon le type de pack (comme dans webhook-routes.ts)
        
        if pack_type == 'ball_skin':
            # Récupérer les infos du pack depuis ball_skin_packs
            cursor.execute("""
                SELECT pack_id, name, skin_ids FROM ball_skin_packs 
                WHERE pack_id = %s AND is_active = 1 
                LIMIT 1
            """, (pack_id,))
            
            pack_info = cursor.fetchone()
            if not pack_info:
                print(f"❌ Pack '{pack_id}' non trouvé dans ball_skin_packs!")
                return False
            
            skin_ids = parse_skin_ids(pack_info['skin_ids'])
            print(f"📦 Pack: {pack_info['name']}")
            print(f"🎨 Skins à débloquer: {', '.join(skin_ids)}\n")
            
            # Étape 1: Enregistrer le pack dans user_ball_skin_packs
            cursor.execute("""
                INSERT IGNORE INTO user_ball_skin_packs 
                (user_id, pack_id, purchased_at, transaction_id, price_paid) 
                VALUES (%s, %s, NOW(), %s, %s)
            """, (user_id, pack_id, SESSION_ID, transaction['amount']))
            
            if cursor.rowcount > 0:
                print(f"✅ Pack enregistré dans user_ball_skin_packs")
            else:
                print(f"ℹ️  Pack déjà dans user_ball_skin_packs")
            
            # Étape 2: Débloquer CHAQUE skin individuel dans user_ball_skins
            skins_unlocked = 0
            for skin_id in skin_ids:
                cursor.execute("""
                    INSERT IGNORE INTO user_ball_skins 
                    (user_id, skin_id, source_pack, unlocked_at) 
                    VALUES (%s, %s, %s, NOW())
                """, (user_id, skin_id, pack_id))
                if cursor.rowcount > 0:
                    skins_unlocked += 1
            
            print(f"✅ {skins_unlocked} skins débloqués dans user_ball_skins\n")
            
        elif pack_type == 'avatar':
            # Étape 1: Enregistrer le pack
            cursor.execute("""
                INSERT IGNORE INTO user_avatar_packs 
                (user_id, pack_id, purchased_at, transaction_id, price_paid) 
                VALUES (%s, %s, NOW(), %s, %s)
            """, (user_id, pack_id, SESSION_ID, transaction['amount']))
            
            # Étape 2: Débloquer les avatars du pack
            cursor.execute("""
                SELECT avatar_id FROM pack_avatars 
                WHERE pack_id = %s 
                ORDER BY display_order ASC
            """, (pack_id,))
            
            avatars = cursor.fetchall()
            avatars_unlocked = 0
            for avatar_row in avatars:
                cursor.execute("""
                    INSERT IGNORE INTO user_avatars 
                    (user_id, avatar_id, unlocked_at) 
                    VALUES (%s, %s, NOW())
                """, (user_id, avatar_row['avatar_id']))
                if cursor.rowcount > 0:
                    avatars_unlocked += 1
            
            print(f"✅ Pack d'avatars débloqué ({avatars_unlocked} avatars)\n")
        
        elif pack_type == 'cash':
            print(f"💰 Pack cash - crédits déjà ajoutés normalement\n")
        
        # 3. Marquer la transaction comme complétée
        cursor.execute("""
            UPDATE payment_transactions
            SET status = 'completed', updated_at = NOW()
            WHERE id = %s
        """, (transaction['id'],))
        
        conn.commit()
        
        print(f"✅ Transaction marquée comme 'completed'")
        print(f"\n🎉 Pack débloqué avec succès!")
        print(f"💡 Le joueur doit se reconnecter pour voir le pack.")
        
        return True
        
    except Exception as e:
        print(f"❌ Erreur: {e}")
        conn.rollback()
        return False
        
    finally:
        conn.close()

if __name__ == '__main__':
    success = unlock_pack()
    exit(0 if success else 1)
