#!/usr/bin/env python3
"""
Compare les résultats entre Smart Optimizer (statique) et Smart Optimizer Dynamic (ATR)
"""
import json
from pathlib import Path


def load_results(filename):
    """Charge résultats depuis JSON"""
    if not Path(filename).exists():
        return []
    with open(filename) as f:
        return json.load(f)


def analyze_results(results, name):
    """Analyse et affiche stats"""
    if not results:
        print(f"\n⏳ {name}: Aucun résultat encore\n")
        return

    profitable = [r for r in results if r['results']['total_pnl_pct'] > 0
                  and r['results']['profit_factor'] > 1.0]

    print(f"\n{'='*80}")
    print(f"📊 {name}")
    print(f"{'='*80}")
    print(f"Tests effectués: {len(results)}")
    print(f"Profitables: {len(profitable)} ({len(profitable)/len(results)*100:.1f}%)")

    if profitable:
        # Trier par PnL
        profitable.sort(key=lambda x: x['results']['total_pnl_pct'], reverse=True)

        best = profitable[0]
        print(f"\n🏆 MEILLEUR:")
        print(f"   PnL: {best['results']['total_pnl_pct']:+.2f}%")
        print(f"   Profit Factor: {best['results']['profit_factor']:.2f}")
        print(f"   Trades: {best['results']['total_trades']}")
        print(f"   Trailing: {int(best['params']['trailing_pct']*100)}%")
        print(f"   Leverage: {best['params']['leverage']}x")

        # Moyennes des profitables
        avg_pnl = sum(r['results']['total_pnl_pct'] for r in profitable) / len(profitable)
        avg_pf = sum(r['results']['profit_factor'] for r in profitable) / len(profitable)
        avg_trades = sum(r['results']['total_trades'] for r in profitable) / len(profitable)

        print(f"\n📈 MOYENNES (configs profitables):")
        print(f"   PnL moyen: {avg_pnl:+.2f}%")
        print(f"   PF moyen: {avg_pf:.2f}")
        print(f"   Trades moyen: {avg_trades:.0f}")

        # Top 5
        print(f"\n🔝 TOP 5:")
        for i, r in enumerate(profitable[:5], 1):
            res = r['results']
            p = r['params']
            print(f"   {i}. PnL: {res['total_pnl_pct']:+.2f}% | "
                  f"PF: {res['profit_factor']:.2f} | "
                  f"Trades: {res['total_trades']} | "
                  f"Trail: {int(p['trailing_pct']*100)}% | "
                  f"Lev: {p['leverage']}x")

    return {
        'total_tests': len(results),
        'profitable_count': len(profitable),
        'profitable_pct': len(profitable)/len(results)*100 if results else 0,
        'best_pnl': profitable[0]['results']['total_pnl_pct'] if profitable else 0,
        'avg_pnl': sum(r['results']['total_pnl_pct'] for r in profitable) / len(profitable) if profitable else 0,
        'avg_pf': sum(r['results']['profit_factor'] for r in profitable) / len(profitable) if profitable else 0,
    }


if __name__ == '__main__':
    print("\n" + "="*80)
    print("🔬 COMPARAISON SMART OPTIMIZERS")
    print("="*80)

    # Charger résultats
    static_results = load_results('smart_optimizer_results.json')
    dynamic_results = load_results('smart_optimizer_dynamic_results.json')

    # Analyser
    static_stats = analyze_results(static_results, "SMART OPTIMIZER (Statique)")
    dynamic_stats = analyze_results(dynamic_results, "SMART OPTIMIZER DYNAMIC (ATR)")

    # Comparaison
    if static_stats and dynamic_stats:
        print(f"\n{'='*80}")
        print("⚔️  HEAD TO HEAD")
        print(f"{'='*80}")

        print(f"\n📊 Volume:")
        print(f"   Statique: {static_stats['total_tests']} tests")
        print(f"   Dynamic:  {dynamic_stats['total_tests']} tests")

        print(f"\n💎 Taux de réussite:")
        print(f"   Statique: {static_stats['profitable_pct']:.1f}%")
        print(f"   Dynamic:  {dynamic_stats['profitable_pct']:.1f}%")
        diff = dynamic_stats['profitable_pct'] - static_stats['profitable_pct']
        print(f"   → Différence: {diff:+.1f}% {'✅' if diff > 0 else '❌'}")

        print(f"\n🏆 Meilleur PnL:")
        print(f"   Statique: {static_stats['best_pnl']:+.2f}%")
        print(f"   Dynamic:  {dynamic_stats['best_pnl']:+.2f}%")
        diff = dynamic_stats['best_pnl'] - static_stats['best_pnl']
        print(f"   → Différence: {diff:+.2f}% {'✅' if diff > 0 else '❌'}")

        print(f"\n📈 PnL moyen (profitables):")
        print(f"   Statique: {static_stats['avg_pnl']:+.2f}%")
        print(f"   Dynamic:  {dynamic_stats['avg_pnl']:+.2f}%")
        diff = dynamic_stats['avg_pnl'] - static_stats['avg_pnl']
        print(f"   → Différence: {diff:+.2f}% {'✅' if diff > 0 else '❌'}")

        print(f"\n💪 Profit Factor moyen:")
        print(f"   Statique: {static_stats['avg_pf']:.2f}")
        print(f"   Dynamic:  {dynamic_stats['avg_pf']:.2f}")
        diff = dynamic_stats['avg_pf'] - static_stats['avg_pf']
        print(f"   → Différence: {diff:+.2f} {'✅' if diff > 0 else '❌'}")

    print(f"\n{'='*80}\n")
