#!/usr/bin/env python3
"""Vérifier les achats récents de packs d'avatars sur la base OVH."""

import sys
import os

# Ajouter le chemin parent au PYTHONPATH
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../..")))

from python.db_config import DB_CONFIG
import mysql.connector

def check_recent_purchases_ovh():
    """Vérifier les achats récents de packs d'avatars sur OVH."""
    print("🔍 Recherche des achats récents de packs d'avatars sur OVH...\n")
    print(f"📍 Connexion à: {DB_CONFIG['host']}:{DB_CONFIG['port']}\n")
    
    try:
        conn = mysql.connector.connect(**DB_CONFIG)
        print("✅ Connecté à la base OVH\n")
    except Exception as e:
        print(f"❌ Impossible de se connecter à la base OVH: {e}")
        return
    
    try:
        cursor = conn.cursor(dictionary=True)
        
        # D'abord, vérifier toutes les transactions récentes
        print("📊 Recherche de TOUTES les transactions récentes...\n")
        
        query_all = """
            SELECT 
                pt.id,
                pt.user_id,
                u.display_name,
                u.email,
                pt.pack_id,
                pt.pack_type,
                pt.amount,
                pt.currency,
                pt.status,
                pt.stripe_session_id,
                pt.stripe_payment_intent_id,
                pt.created_at,
                pt.updated_at
            FROM payment_transactions pt
            JOIN users u ON pt.user_id = u.id
            ORDER BY pt.updated_at DESC
            LIMIT 20
        """
        
        cursor.execute(query_all)
        all_transactions = cursor.fetchall()
        
        if all_transactions:
            print(f"✅ {len(all_transactions)} transaction(s) récente(s) trouvée(s):\n")
            print("=" * 120)
            
            for i, t in enumerate(all_transactions, 1):
                print(f"\n💳 TRANSACTION #{i}")
                print(f"   ID: {t['id']}")
                print(f"   👤 Client: {t['display_name']} (ID: {t['user_id']})")
                print(f"   📧 Email: {t['email']}")
                print(f"   📦 Pack: {t['pack_id']} (Type: {t['pack_type']})")
                print(f"   💰 Montant: {t['amount']}€ ({t['currency']})")
                print(f"   📊 Statut: {t['status']}")
                print(f"   📅 Créé: {t['created_at']} | Modifié: {t['updated_at']}")
                
                if t['stripe_session_id']:
                    print(f"   🎫 Session: {t['stripe_session_id'][:50]}...")
                if t['stripe_payment_intent_id']:
                    print(f"   💳 Payment Intent: {t['stripe_payment_intent_id']}")
                
                print("-" * 120)
        else:
            print("❌ Aucune transaction trouvée dans payment_transactions\n")
        
        # Maintenant, chercher spécifiquement les achats de packs d'avatars
        print("\n\n🎨 Recherche spécifique des PACKS D'AVATARS...\n")
        
        # Récupérer les achats de packs d'avatars avec les infos utilisateur
        query = """
            SELECT 
                uap.user_id,
                u.display_name,
                u.email,
                uap.pack_id,
                uap.purchased_at,
                uap.transaction_id,
                uap.price_paid,
                pt.stripe_payment_intent_id,
                pt.stripe_session_id,
                pt.status as transaction_status
            FROM user_avatar_packs uap
            JOIN users u ON uap.user_id = u.id
            LEFT JOIN payment_transactions pt ON pt.stripe_session_id = uap.transaction_id
            ORDER BY uap.purchased_at DESC
            LIMIT 10
        """
        
        cursor.execute(query)
        purchases = cursor.fetchall()
        
        if not purchases:
            print("❌ Aucun achat de pack d'avatars trouvé dans la base de données OVH")
            return
        
        print(f"✅ {len(purchases)} achat(s) trouvé(s):\n")
        print("=" * 120)
        
        for i, p in enumerate(purchases, 1):
            print(f"\n🛒 ACHAT #{i}")
            print(f"   👤 Acheteur: {p['display_name']} (ID: {p['user_id']})")
            print(f"   📧 Email: {p['email']}")
            print(f"   📦 Pack: {p['pack_id']}")
            print(f"   💰 Prix payé: {p['price_paid']}€")
            print(f"   📅 Date d'achat: {p['purchased_at']}")
            print(f"   🔑 Transaction ID: {p['transaction_id'][:50] if p['transaction_id'] else 'N/A'}...")
            
            if p['stripe_payment_intent_id']:
                print(f"   💳 Payment Intent: {p['stripe_payment_intent_id']}")
            else:
                print(f"   ⚠️  Payment Intent: MANQUANT (sera ajouté avec le prochain déploiement)")
                
            if p['stripe_session_id']:
                print(f"   🎫 Session ID: {p['stripe_session_id'][:50]}...")
                
            if p['transaction_status']:
                print(f"   📊 Statut transaction: {p['transaction_status']}")
            
            print("-" * 120)
        
        # Vérifier combien d'avatars ont été débloqués pour chaque achat
        print("\n\n📊 Vérification des avatars débloqués:")
        print("=" * 120)
        
        for p in purchases:
            cursor.execute("""
                SELECT COUNT(*) as count
                FROM user_avatars ua
                WHERE ua.user_id = %s 
                AND ua.avatar_id IN (
                    SELECT avatar_id FROM pack_avatars WHERE pack_id = %s
                )
            """, (p['user_id'], p['pack_id']))
            
            result = cursor.fetchone()
            avatar_count = result['count'] if result else 0
            
            # Vérifier combien d'avatars devrait contenir ce pack
            cursor.execute("""
                SELECT COUNT(*) as expected
                FROM pack_avatars
                WHERE pack_id = %s
            """, (p['pack_id'],))
            
            result = cursor.fetchone()
            expected_count = result['expected'] if result else 0
            
            print(f"\n👤 {p['display_name']} - Pack '{p['pack_id']}' (acheté le {p['purchased_at']}):")
            print(f"   📦 Avatars débloqués: {avatar_count}/{expected_count}")
            
            if avatar_count == expected_count and expected_count > 0:
                print(f"   ✅ PARFAIT! Tous les avatars ont été débloqués correctement")
            elif expected_count == 0:
                print(f"   ⚠️ ATTENTION: Le pack ne contient aucun avatar dans pack_avatars!")
            elif avatar_count == 0:
                print(f"   ❌ CRITIQUE: Aucun avatar débloqué alors que le pack en contient {expected_count}!")
            else:
                print(f"   ⚠️ PARTIEL: Seulement {avatar_count} avatars sur {expected_count} ont été débloqués")
        
        print("\n" + "=" * 120)
        print("\n💡 RÉSUMÉ:")
        print(f"   • {len(purchases)} achat(s) de pack d'avatars trouvé(s)")
        print(f"   • Pour que les images s'affichent, les fichiers 01.png à 19.png doivent être sur le serveur")
        print(f"   • Après le prochain déploiement, le Payment Intent ID sera visible dans le panel admin")
        
    except Exception as e:
        print(f"❌ Erreur: {e}")
        import traceback
        traceback.print_exc()
    finally:
        cursor.close()
        conn.close()

if __name__ == "__main__":
    check_recent_purchases_ovh()
