#!/usr/bin/env python3
"""
Test rapide de la stratégie hybride
Vérifie que tout fonctionne et génère des signaux
"""

import pandas as pd
import requests
import sys

from hybrid_strategy import HybridStrategy
from market_detector import MarketDetector


def get_btc_data(limit: int = 500) -> pd.DataFrame:
    """Récupère données BTC depuis Binance"""
    print("📊 Récupération données BTC...")

    url = f"https://api.binance.com/api/v3/klines"
    params = {
        'symbol': 'BTCUSDT',
        'interval': '1m',
        'limit': limit
    }

    try:
        response = requests.get(url, params=params, timeout=10)
        response.raise_for_status()
        data = response.json()

        df = pd.DataFrame(data, columns=[
            'timestamp', 'open', 'high', 'low', 'close', 'volume',
            'close_time', 'quote_volume', 'trades', 'taker_buy_base',
            'taker_buy_quote', 'ignore'
        ])

        df = df[['timestamp', 'open', 'high', 'low', 'close', 'volume']]
        df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')

        for col in ['open', 'high', 'low', 'close', 'volume']:
            df[col] = df[col].astype(float)

        print(f"✅ {len(df)} bougies chargées")
        return df

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


def main():
    print("=" * 80)
    print("🎯 TEST HYBRID STRATEGY")
    print("=" * 80)
    print()

    # 1. Charger données
    df = get_btc_data(limit=500)
    print()

    # 2. Test Market Detector
    print("=" * 80)
    print("🔍 TEST MARKET DETECTOR")
    print("=" * 80)
    detector = MarketDetector()
    analysis = detector.detect(df)

    print(f"Régime: {analysis.regime.value}")
    print(f"Confidence: {analysis.confidence:.1f}%")
    print(f"Raison: {analysis.reason}")
    print()
    print("Scores:")
    print(f"  BULL: {analysis.bull_score:.1f}")
    print(f"  BEAR: {analysis.bear_score:.1f}")
    print(f"  RANGE: {analysis.range_score:.1f}")
    print(f"  Volatilité: {analysis.volatility:.2f}%")
    print()

    # 3. Test Hybrid Strategy
    print("=" * 80)
    print("🎯 TEST HYBRID STRATEGY")
    print("=" * 80)
    strategy = HybridStrategy(leverage=200)
    signal = strategy.analyze('BTCUSD', df)

    if signal:
        print("✅ SIGNAL GÉNÉRÉ")
        print(f"  Symbole: {signal.symbol}")
        print(f"  Side: {signal.side}")
        print(f"  Entry: ${signal.entry_price:,.2f}")
        print(f"  Stop Loss: ${signal.stop_loss:,.2f}")
        print(f"  Take Profit: ${signal.take_profit:,.2f}")
        print(f"  Leverage: {signal.leverage}x")
        print(f"  Confidence: {signal.confidence:.1f}%")
        print(f"  Stratégie: {signal.strategy_used}")
        print(f"  Régime: {signal.market_regime}")
        print(f"  Raison: {signal.reason}")
    else:
        print("⚠️  Aucun signal généré (conditions non remplies)")

    print()
    print("=" * 80)
    print("📊 STATISTIQUES STRATÉGIE")
    print("=" * 80)
    stats = strategy.get_stats()
    for k, v in stats.items():
        print(f"  {k}: {v}")

    print()
    print("=" * 80)
    print("✅ TEST TERMINÉ")
    print("=" * 80)


if __name__ == '__main__':
    main()
