"""
Script de test rapide pour vérifier que tout fonctionne
"""

import logging
import sys

print("🚀 Apollo Degen Bot - Quick Test\n")
print("="*60)

# Test 1: Imports
print("\n1️⃣  Test des imports...")
try:
    import config
    print("   ✅ config")
except Exception as e:
    print(f"   ❌ config: {e}")
    sys.exit(1)

try:
    from apollo_client import ApolloDegenClient
    print("   ✅ apollo_client")
except Exception as e:
    print(f"   ❌ apollo_client: {e}")
    print("   💡 Installer: pip install apollox-connector-python")
    sys.exit(1)

try:
    from signals.short_term_signals import ShortTermSignalGenerator
    print("   ✅ signals.short_term_signals")
except Exception as e:
    print(f"   ❌ signals: {e}")
    sys.exit(1)

try:
    from strategies.shitcoin_top_detector import ShitcoinTopDetector
    print("   ✅ strategies.shitcoin_top_detector")
except Exception as e:
    print(f"   ❌ strategies: {e}")
    sys.exit(1)

try:
    from backtesting.backtester import DegenBacktester
    print("   ✅ backtesting.backtester")
except Exception as e:
    print(f"   ❌ backtester: {e}")
    sys.exit(1)

# Test 2: Client API
print("\n2️⃣  Test de la connexion API ApolloX...")
try:
    client = ApolloDegenClient()
    print("   ✅ Client créé (mode public)")

    # Test récupération données
    df = client.get_klines('BTCUSDT', '1m', limit=10)
    if not df.empty:
        print(f"   ✅ Klines récupérées: {len(df)} chandeliers")
        print(f"   📊 BTC: ${df.iloc[-1]['close']:.2f}")
    else:
        print("   ⚠️  Klines vides")

    # Test ticker
    ticker = client.get_ticker('BTCUSDT')
    if ticker:
        price = float(ticker.get('lastPrice', 0))
        change = float(ticker.get('priceChangePercent', 0))
        print(f"   ✅ Ticker: ${price:,.2f} ({change:+.2f}%)")
    else:
        print("   ⚠️  Ticker vide")

except Exception as e:
    print(f"   ❌ Erreur client: {e}")
    sys.exit(1)

# Test 3: Générateur de signaux
print("\n3️⃣  Test du générateur de signaux...")
try:
    generator = ShortTermSignalGenerator()
    print(f"   ✅ Générateur créé ({len(generator.strategies)} stratégies)")

    # Générer signaux
    df = client.get_klines('BTCUSDT', '1m', limit=100)
    signals = generator.generate_signals(df, 'BTCUSDT')

    print(f"   📊 Signaux générés: {len(signals)}")

    for sig in signals[:3]:  # Afficher max 3
        print(f"      {sig.strategy}: {sig.side} score={sig.score:.2%} confluences={len(sig.confluences)}")

except Exception as e:
    print(f"   ❌ Erreur générateur: {e}")
    import traceback
    traceback.print_exc()

# Test 4: Détecteur de tops
print("\n4️⃣  Test du détecteur de tops shitcoins...")
try:
    detector = ShitcoinTopDetector()
    print("   ✅ Détecteur créé")

    # Test sur BTC (ne devrait pas détecter de top)
    df = client.get_klines('BTCUSDT', '1m', limit=100)
    detection = detector.analyze_for_top(df, 'BTCUSDT')

    if detection:
        print(f"   📊 Top détecté: +{detection.pump_percent:.1f}% (score: {detection.confidence_score:.2%})")
    else:
        print("   ✅ Pas de top détecté (normal pour BTC)")

except Exception as e:
    print(f"   ❌ Erreur détecteur: {e}")
    import traceback
    traceback.print_exc()

# Test 5: Backtester
print("\n5️⃣  Test du backtester...")
try:
    backtester = DegenBacktester(initial_capital=1000, leverage=250)
    print(f"   ✅ Backtester créé (capital: $1000, leverage: 250x)")

    # Test sur petite période
    df = client.get_klines('BTCUSDT', '1m', limit=500)
    print(f"   📊 Données: {len(df)} chandeliers")

    if len(df) >= 200:
        print("   🧪 Lancement backtest rapide (peut prendre 30s-1min)...")
        result = backtester.backtest_strategy(df, 'BTCUSDT', strategy_name='SCALPING_RSI_VOLUME')

        if result:
            print(f"   ✅ Backtest terminé!")
            print(f"      Return: {result.total_return_pct:+.2f}%")
            print(f"      Trades: {result.total_trades}")
            print(f"      Win rate: {result.win_rate*100:.1f}%")
            print(f"      Profit factor: {result.profit_factor:.2f}")
        else:
            print("   ⚠️  Pas de trades générés (période trop courte ou pas de setups)")
    else:
        print("   ⚠️  Pas assez de données pour backtest")

except Exception as e:
    print(f"   ❌ Erreur backtester: {e}")
    import traceback
    traceback.print_exc()

# Résumé
print("\n" + "="*60)
print("✅ TESTS TERMINÉS!\n")

print("📋 Prochaines étapes:")
print("   1. Configurer les clés API dans config.py (si trading live)")
print("   2. Lancer un backtest complet: python3 run_backtest.py")
print("   3. Analyser les résultats et choisir la meilleure stratégie")
print("   4. Tester en paper trading avant le live")
print("\n⚠️  RAPPEL: Leverage extrême = Risque extrême!")
print("="*60 + "\n")
