#!/usr/bin/env python3
"""
Script pour:
1. Vérifier la structure de la table wallets
2. Ajouter les colonnes manquantes (bonus_points, last_updated)
3. Vérifier si le paiement Platinum a été enregistré
4. Créditer les items manquants à bruno@taaazzz-prog.fr
"""

import mysql.connector
from datetime import datetime
from python.db_config import DB_CONFIG

def main():
    conn = mysql.connector.connect(**DB_CONFIG)
    cursor = conn.cursor(dictionary=True)
    
    print("=" * 70)
    print("DIAGNOSTIC ET FIX PACK PLATINUM - BRUNO")
    print("=" * 70)
    
    # 1. Vérifier la structure de wallets
    print("\n1. STRUCTURE DE LA TABLE WALLETS:")
    try:
        cursor.execute("DESCRIBE wallets")
        columns = cursor.fetchall()
        for col in columns:
            print(f"   - {col['Field']}: {col['Type']}")
        
        # Vérifier les colonnes manquantes
        column_names = [col['Field'] for col in columns]
        missing = []
        if 'bonus_points' not in column_names:
            missing.append('bonus_points')
        if 'last_updated' not in column_names:
            missing.append('last_updated')
        
        if missing:
            print(f"\n   ⚠️ COLONNES MANQUANTES: {missing}")
        else:
            print(f"\n   ✓ Toutes les colonnes attendues sont présentes")
    except Exception as e:
        print(f"   ❌ Erreur: {e}")
    
    # 2. Ajouter les colonnes manquantes
    print("\n2. AJOUT DES COLONNES MANQUANTES:")
    try:
        # Vérifier et ajouter bonus_points
        cursor.execute("DESCRIBE wallets")
        columns = cursor.fetchall()
        column_names = [col['Field'] for col in columns]
        
        if 'bonus_points' not in column_names:
            print("   → Ajout de colonne bonus_points...")
            cursor.execute("ALTER TABLE wallets ADD COLUMN bonus_points INT DEFAULT 0")
            print("   ✓ bonus_points ajoutée")
        
        if 'last_updated' not in column_names:
            print("   → Ajout de colonne last_updated...")
            cursor.execute("ALTER TABLE wallets ADD COLUMN last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
            print("   ✓ last_updated ajoutée")
        
        conn.commit()
    except Exception as e:
        print(f"   ❌ Erreur lors de l'ajout: {e}")
        conn.rollback()
    
    # 3. Récupérer l'utilisateur bruno
    print("\n3. UTILISATEUR BRUNO:")
    try:
        cursor.execute("""
            SELECT id, email, display_name, created_at 
            FROM users 
            WHERE email = 'bruno@taaazzz-prog.fr'
        """)
        user = cursor.fetchone()
        if user:
            user_id = user['id']
            print(f"   ✓ Trouvé: {user['display_name']} (ID: {user_id})")
            print(f"   Email: {user['email']}")
            print(f"   Créé le: {user['created_at']}")
        else:
            print("   ❌ Utilisateur non trouvé!")
            return
    except Exception as e:
        print(f"   ❌ Erreur: {e}")
        return
    
    # 4. Vérifier le wallet actuel
    print("\n4. WALLET ACTUEL DE BRUNO:")
    try:
        cursor.execute("""
            SELECT * FROM wallets WHERE user_id = %s
        """, (user_id,))
        wallet = cursor.fetchone()
        if wallet:
            print(f"   Points: {wallet.get('points', 0)}")
            print(f"   Indices: {wallet.get('hints', 0)}")
            print(f"   Annulations: {wallet.get('undos', 0)}")
            print(f"   Solutions: {wallet.get('replays', 0)}")
            print(f"   Points bonus: {wallet.get('bonus_points', 'N/A')}")
        else:
            print("   ⚠️ Pas de wallet trouvé - création nécessaire")
    except Exception as e:
        print(f"   ❌ Erreur: {e}")
    
    # 5. Vérifier les achats de packs
    print("\n5. HISTORIQUE D'ACHATS:")
    try:
        # Avatar packs
        cursor.execute("""
            SELECT pack_id, purchased_at, transaction_id, price_paid
            FROM user_avatar_packs
            WHERE user_id = %s
        """, (user_id,))
        avatar_packs = cursor.fetchall()
        if avatar_packs:
            print("   Avatar Packs:")
            for pack in avatar_packs:
                print(f"     - {pack['pack_id']}: {pack['price_paid']}€ ({pack['purchased_at']})")
        
        # Ball skin packs
        cursor.execute("""
            SELECT pack_id, purchased_at, transaction_id, price_paid
            FROM user_ball_skin_packs
            WHERE user_id = %s
        """, (user_id,))
        ball_packs = cursor.fetchall()
        if ball_packs:
            print("   Ball Skin Packs:")
            for pack in ball_packs:
                print(f"     - {pack['pack_id']}: {pack['price_paid']}€ ({pack['purchased_at']})")
        
        # Challenge pack
        cursor.execute("""
            SELECT purchased_at, transaction_id, price_paid
            FROM user_challenge_pack
            WHERE user_id = %s
        """, (user_id,))
        challenge_pack = cursor.fetchone()
        if challenge_pack:
            print("   Challenge Pack:")
            print(f"     - Prix payé: {challenge_pack['price_paid']}€ ({challenge_pack['purchased_at']})")
        
        if not avatar_packs and not ball_packs and not challenge_pack:
            print("   ❌ Aucun achat de pack enregistré!")
    except Exception as e:
        print(f"   ❌ Erreur: {e}")
    
    # 6. Chercher des sessions Stripe
    print("\n6. VÉRIFICATION STRIPE:")
    try:
        # Vérifier si la table existe
        cursor.execute("""
            SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES 
            WHERE TABLE_SCHEMA = 'RollerLogic' AND TABLE_NAME = 'stripe_sessions'
        """)
        if cursor.fetchone():
            cursor.execute("""
                SELECT session_id, amount_total, status, created_at, metadata
                FROM stripe_sessions
                WHERE user_id = %s
                ORDER BY created_at DESC
            """, (user_id,))
            sessions = cursor.fetchall()
            if sessions:
                print("   Sessions trouvées:")
                for session in sessions:
                    print(f"     - {session['session_id']}: {session['amount_total']}€ ({session['status']})")
            else:
                print("   ❌ Aucune session Stripe pour cet utilisateur")
        else:
            print("   ⚠️ Table stripe_sessions n'existe pas")
    except Exception as e:
        print(f"   ⚠️ Pas de table stripe_sessions: {e}")
    
    # 7. Créditer le Pack Platinum
    print("\n7. CRÉDIT DU PACK PLATINUM:")
    print("   Pack Platinum contient:")
    print("     - Indices: 24")
    print("     - Annulations: 16")
    print("     - Solutions: 4")
    print("     - Points bonus: 180")
    
    try:
        # S'assurer que le wallet existe
        cursor.execute("""
            INSERT IGNORE INTO wallets (user_id, points, hints, undos, replays, bonus_points)
            VALUES (%s, 0, 0, 0, 0, 0)
        """, (user_id,))
        conn.commit()
        
        # Créditer les items
        cursor.execute("""
            UPDATE wallets 
            SET hints = hints + 24,
                undos = undos + 16,
                replays = replays + 4,
                bonus_points = bonus_points + 180,
                last_updated = NOW()
            WHERE user_id = %s
        """, (user_id,))
        conn.commit()
        
        if cursor.rowcount > 0:
            print("   ✓ Items crédités avec succès!")
            
            # Vérifier le nouveau wallet
            cursor.execute("SELECT * FROM wallets WHERE user_id = %s", (user_id,))
            new_wallet = cursor.fetchone()
            print("\n   Nouveau wallet:")
            print(f"     - Indices: {new_wallet.get('hints', 0)}")
            print(f"     - Annulations: {new_wallet.get('undos', 0)}")
            print(f"     - Solutions: {new_wallet.get('replays', 0)}")
            print(f"     - Points bonus: {new_wallet.get('bonus_points', 0)}")
        else:
            print("   ❌ Mise à jour échouée")
    except Exception as e:
        print(f"   ❌ Erreur: {e}")
        conn.rollback()
    
    print("\n" + "=" * 70)
    conn.close()

if __name__ == "__main__":
    main()
