#!/usr/bin/env python3
import sys
import csv
import json
from pathlib import Path

def analyze_tuning(csv_path: str):
    """Analyze tuning results and identify best candidate."""

    rows = []
    with open(csv_path) as f:
        for row in csv.DictReader(f):
            rows.append(row)

    if not rows:
        print("No results found")
        return

    # Parse metrics
    for row in rows:
        try:
            row['mtm'] = float(row.get('total_pnl_mtm_eval', 0))
            row['dd'] = abs(float(row.get('mdd_mtm_%', 0)) / 100)
            row['ratio'] = row['mtm'] / row['dd'] if row['dd'] > 0 else 0
            row['margin_calls'] = int(row.get('margin_calls', 0))
            row['unrealized'] = float(row.get('total_unrealized_usdt', 0))
        except:
            pass

    # Filter valid candidates (margin_calls <= 2, unrealized >= -60)
    valid = [r for r in rows if r['margin_calls'] <= 2 and r['unrealized'] >= -60]

    if not valid:
        print("No valid candidates (constraint violations)")
        valid = rows  # Show all if none valid

    # Sort by ratio descending
    valid.sort(key=lambda x: x['ratio'], reverse=True)

    print(f"Total candidates: {len(rows)}")
    print(f"Valid (margin≤2, unrealized≥-60): {len([r for r in rows if r['margin_calls'] <= 2 and r['unrealized'] >= -60])}")
    print()

    print("Top 10 by ratio:")
    print("Rank | Param | Value | Ratio | MTM | DD% | Margin | Unrealized | Notes")
    for i, row in enumerate(valid[:10], 1):
        param = str(row.get('param', 'unknown'))[:20]
        value = str(row.get('value', 'unknown'))[:15]
        print(f"{i:2d}   | {param:20s} | {value:15s} | {row['ratio']:6.2f} | {row['mtm']:7.2f} | {row['dd']*100:5.1f} | {row['margin_calls']:2d} | {row['unrealized']:7.2f} | {row.get('constraint_ok', 'unk')}")

    best = valid[0] if valid else rows[0]
    print()
    print(f"BEST: {best.get('param')} = {best.get('value')}")
    print(f"  Ratio: {best['ratio']:.2f}")
    print(f"  MTM: {best['mtm']:.2f}")
    print(f"  DD: {best['dd']*100:.2f}%")
    print(f"  Margin Calls: {best['margin_calls']}")
    print(f"  Unrealized: {best['unrealized']:.2f}")

if __name__ == '__main__':
    if len(sys.argv) < 2:
        print("Usage: analyze_tuning_results.py <csv_path>")
        sys.exit(1)
    analyze_tuning(sys.argv[1])
