"""
Test de connexion API ApolloX
Vérifie que les clés sont correctement configurées
"""

import logging
from apollo_client import ApolloDegenClient
import sys

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

def test_connection():
    """Test complet de la connexion API"""

    logger.info("="*80)
    logger.info("🔍 TEST DE CONNEXION API APOLLOX")
    logger.info("="*80)
    logger.info("")

    try:
        # Créer client
        logger.info("1️⃣  Initialisation du client...")
        client = ApolloDegenClient()

        if not client.authenticated:
            logger.error("❌ Client non authentifié - Clés API manquantes ou invalides")
            logger.info("")
            logger.info("💡 Pour configurer vos clés API:")
            logger.info("   python3 setup_api_keys.py")
            logger.info("")
            logger.info("   OU modifier config.py manuellement:")
            logger.info("   APOLLOX_API_KEY = 'votre_clé'")
            logger.info("   APOLLOX_API_SECRET = 'votre_secret'")
            return False

        logger.info("✅ Client initialisé")
        logger.info("")

        # Test 1: Account Info
        logger.info("2️⃣  Récupération des informations de compte...")
        try:
            account = client.get_account()
            balance_usdt = 0

            for asset in account.get('assets', []):
                if asset['asset'] == 'USDT':
                    balance_usdt = float(asset['walletBalance'])
                    break

            logger.info(f"✅ Balance USDT: ${balance_usdt:.2f}")
            logger.info(f"   Available: ${float(asset.get('availableBalance', 0)):.2f}")
            logger.info(f"   In positions: ${float(asset.get('crossUnPnl', 0)):.2f}")
        except Exception as e:
            logger.error(f"❌ Erreur account info: {e}")
            return False

        logger.info("")

        # Test 2: Positions
        logger.info("3️⃣  Vérification des positions ouvertes...")
        try:
            positions = client.get_position_risk()
            open_positions = [p for p in positions if float(p.get('positionAmt', 0)) != 0]

            if open_positions:
                logger.info(f"⚠️  {len(open_positions)} position(s) ouverte(s):")
                for pos in open_positions:
                    symbol = pos['symbol']
                    size = float(pos['positionAmt'])
                    entry = float(pos['entryPrice'])
                    pnl = float(pos['unRealizedProfit'])
                    logger.info(f"   {symbol}: {size} @ ${entry:.2f} (PnL: ${pnl:+.2f})")
            else:
                logger.info("✅ Aucune position ouverte")
        except Exception as e:
            logger.error(f"❌ Erreur positions: {e}")
            return False

        logger.info("")

        # Test 3: Exchange Info
        logger.info("4️⃣  Récupération des informations de marché...")
        try:
            exchange_info = client.client.exchange_info()
            symbols_count = len(exchange_info.get('symbols', []))
            logger.info(f"✅ {symbols_count} paires disponibles sur ApolloX")
        except Exception as e:
            logger.error(f"❌ Erreur exchange info: {e}")
            return False

        logger.info("")

        # Test 4: Market Data
        logger.info("5️⃣  Test de récupération de données de marché...")
        try:
            df = client.get_klines('BTCUSDT', '1m', limit=10)
            if not df.empty:
                last_price = df.iloc[-1]['close']
                logger.info(f"✅ Données BTC récupérées")
                logger.info(f"   Dernier prix: ${last_price:,.2f}")
                logger.info(f"   Chandeliers: {len(df)}")
            else:
                logger.warning("⚠️  DataFrame vide")
        except Exception as e:
            logger.error(f"❌ Erreur market data: {e}")
            return False

        logger.info("")
        logger.info("="*80)
        logger.info("✅ TOUS LES TESTS RÉUSSIS!")
        logger.info("="*80)
        logger.info("")
        logger.info("🎉 Votre configuration API est correcte!")
        logger.info("")
        logger.info("📊 Prochaines étapes:")
        logger.info("   1. Vérifier leverages:     python3 check_leverage_limits.py")
        logger.info("   2. Backtest V10:           python3 test_v10_final.py")
        logger.info("   3. Paper trading:          python3 paper_trader_v10.py")
        logger.info("   4. Live trading (prudent): python3 live_trader_v10.py")
        logger.info("")

        return True

    except Exception as e:
        logger.error(f"❌ ERREUR CRITIQUE: {e}")
        logger.info("")
        logger.info("🔧 Solutions possibles:")
        logger.info("   1. Vérifier que les clés API sont correctes")
        logger.info("   2. Vérifier que l'API est activée sur ApolloX")
        logger.info("   3. Vérifier l'IP whitelist si configurée")
        logger.info("   4. Vérifier les permissions de l'API")
        logger.info("")
        return False


if __name__ == '__main__':
    success = test_connection()
    sys.exit(0 if success else 1)
