"""
Script pour traiter automatiquement les paiements Stripe en attente
Vérifie sur Stripe si les sessions sont payées et débloque les packs
"""
import mysql.connector
import requests
import os
from python.db_config import DB_CONFIG
from pathlib import Path

# Charger la clé secrète Stripe depuis .env
_env_path = Path(__file__).parent / "clef_stripe.txt"
STRIPE_SECRET_KEY = None

if _env_path.exists():
    for line in _env_path.read_text(encoding="utf-8").splitlines():
        if line.startswith("STRIPE_SECRET_KEY="):
            STRIPE_SECRET_KEY = line.split("=", 1)[1].strip()
            break

def check_stripe_session_status(session_id: str) -> dict:
    """Vérifie le statut d'une session Stripe"""
    if not STRIPE_SECRET_KEY:
        print("❌ Clé Stripe manquante")
        return {"error": "No API key"}
    
    headers = {
        "Authorization": f"Bearer {STRIPE_SECRET_KEY}",
    }
    
    response = requests.get(
        f"https://api.stripe.com/v1/checkout/sessions/{session_id}",
        headers=headers
    )
    
    if response.status_code == 200:
        return response.json()
    else:
        return {"error": response.text}

def process_pending_payments():
    """Traite tous les paiements en attente (status = 'created')"""
    conn = mysql.connector.connect(**DB_CONFIG)
    cursor = conn.cursor(dictionary=True)
    
    try:
        # Récupérer les transactions en attente
        cursor.execute("""
            SELECT * FROM payment_transactions 
            WHERE status = 'created' AND stripe_session_id IS NOT NULL
            ORDER BY created_at ASC
        """)
        
        transactions = cursor.fetchall()
        
        if not transactions:
            print("✅ Aucun paiement en attente")
            return
        
        print(f"🔍 {len(transactions)} paiement(s) en attente trouvé(s)\n")
        
        for transaction in transactions:
            session_id = transaction['stripe_session_id']
            user_id = transaction['user_id']
            pack_id = transaction['pack_id']
            pack_type = transaction['pack_type']
            
            print(f"📦 Transaction #{transaction['id']}")
            print(f"   Session: {session_id[:30]}...")
            print(f"   User: {user_id}, Pack: {pack_id} ({pack_type})")
            
            # Vérifier le statut sur Stripe
            session_data = check_stripe_session_status(session_id)
            
            if "error" in session_data:
                print(f"   ❌ Erreur Stripe: {session_data['error'][:100]}")
                continue
            
            payment_status = session_data.get('payment_status', 'unpaid')
            status = session_data.get('status', 'open')
            
            print(f"   Stripe Status: {status}, Payment: {payment_status}")
            
            # Si payé, débloquer le pack
            if payment_status == 'paid' and status == 'complete':
                print(f"   ✅ Paiement confirmé - Déblocage...")
                
                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é")
                    else:
                        # Débloquer
                        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 débloqué!")
                
                elif pack_type == 'avatar':
                    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é")
                    else:
                        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ébloqué!")
                
                # Marquer comme complété
                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"   ✅ Transaction marquée comme complétée\n")
                
            elif payment_status == 'unpaid':
                print(f"   ⏳ Paiement non finalisé (session ouverte)\n")
            else:
                print(f"   ⚠️  Statut inconnu: {payment_status}\n")
    
    except Exception as e:
        print(f"❌ Erreur: {e}")
        conn.rollback()
    
    finally:
        cursor.close()
        conn.close()

if __name__ == "__main__":
    print("🔄 Traitement automatique des paiements Stripe en attente\n")
    print("=" * 60 + "\n")
    
    if not STRIPE_SECRET_KEY:
        print("❌ Erreur: STRIPE_SECRET_KEY introuvable dans clef_stripe.txt")
        print("   Créez le fichier avec: STRIPE_SECRET_KEY=sk_live_...")
        exit(1)
    
    process_pending_payments()
    
    print("\n" + "=" * 60)
    print("✅ Traitement terminé")
