"""
Script pour vérifier une transaction Stripe et débloquer manuellement un pack si nécessaire
"""
import mysql.connector
from python.db_config import DB_CONFIG

def check_stripe_transaction(session_id: str):
    """Vérifie une transaction Stripe par son session_id"""
    conn = mysql.connector.connect(**DB_CONFIG)
    cursor = conn.cursor(dictionary=True)
    
    try:
        # Vérifier si la transaction existe
        cursor.execute("""
            SELECT * FROM payment_transactions 
            WHERE stripe_session_id = %s
            ORDER BY created_at DESC
            LIMIT 1
        """, (session_id,))
        
        transaction = cursor.fetchone()
        
        if transaction:
            print(f"✅ Transaction trouvée:")
            print(f"   ID: {transaction['id']}")
            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']}")
            print(f"   Amount: {transaction['amount']} {transaction['currency']}")
            print(f"   Created: {transaction['created_at']}")
            print(f"   Updated: {transaction['updated_at']}")
            
            # Vérifier si le pack a été débloqué
            user_id = transaction['user_id']
            pack_id = transaction['pack_id']
            pack_type = transaction['pack_type']
            
            if pack_type == 'ball_skin':
                cursor.execute("""
                    SELECT * FROM user_ball_skin_packs
                    WHERE user_id = %s AND pack_id = %s
                """, (user_id, pack_id))
                
                pack_unlocked = cursor.fetchone()
                
                if pack_unlocked:
                    print(f"\n✅ Pack débloqué:")
                    print(f"   Purchased at: {pack_unlocked['purchased_at']}")
                else:
                    print(f"\n❌ Pack NON débloqué pour l'utilisateur {user_id}")
                    print(f"   Pack ID: {pack_id}")
                    
                    # Proposer de débloquer manuellement
                    response = input("\n🔓 Voulez-vous débloquer manuellement ce pack? (oui/non): ")
                    if response.lower() in ['oui', 'o', 'yes', 'y']:
                        unlock_ball_skin_pack(cursor, conn, user_id, pack_id, transaction['id'])
            
            elif pack_type == 'avatar':
                cursor.execute("""
                    SELECT * FROM user_avatar_packs
                    WHERE user_id = %s AND pack_id = %s
                """, (user_id, pack_id))
                
                pack_unlocked = cursor.fetchone()
                
                if pack_unlocked:
                    print(f"\n✅ Pack avatar débloqué")
                else:
                    print(f"\n❌ Pack avatar NON débloqué")
                    
        else:
            print(f"❌ Aucune transaction trouvée avec session_id: {session_id}")
            print(f"\n💡 Cela signifie que le webhook n'a pas été reçu.")
            print(f"   Vérifiez les logs du webhook sur Stripe Dashboard:")
            print(f"   https://dashboard.stripe.com/webhooks")
    
    finally:
        cursor.close()
        conn.close()

def unlock_ball_skin_pack(cursor, conn, user_id: int, pack_id: str, transaction_id: int):
    """Débloquer manuellement un pack de billes"""
    try:
        # 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: {pack_id}")
            return
        
        # Débloquer le pack
        cursor.execute("""
            INSERT INTO user_ball_skin_packs (user_id, pack_id)
            VALUES (%s, %s)
        """, (user_id, pack_id))
        
        # 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"\n✅ Pack {pack_id} débloqué pour l'utilisateur {user_id}")
        print(f"   Transaction {transaction_id} marquée comme 'completed'")
        
    except Exception as e:
        print(f"❌ Erreur lors du déblocage: {e}")
        conn.rollback()

if __name__ == "__main__":
    # Session ID du paiement Stripe
    session_id = "cs_live_a1X9JO1YNYIbRzh5W2VWLwYHk9VYortxzZhbvYtHckPazAly9wtYkK0STB"
    check_stripe_transaction(session_id)
