import pandas as pd
from pathlib import Path
import sys

BASE_PATH = Path(__file__).resolve().parents[2]
SRC_PATH = BASE_PATH / "src"

if str(SRC_PATH) not in sys.path:
    sys.path.append(str(SRC_PATH))

from research.combined_candidate_matrix_v1 import run_combo


def run_test():
    candidates = [
        {"name": "A_best_growth", "threshold": 2.75, "fib": 0.786, "hold_hours": 52},
        {"name": "B_smoother_53h", "threshold": 2.75, "fib": 0.786, "hold_hours": 53},
        {"name": "C_higher_hit_rate_25h", "threshold": 2.75, "fib": 0.786, "hold_hours": 25},
    ]

    rows = []

    for c in candidates:
        res = run_combo(
            threshold=c["threshold"],
            fib=c["fib"],
            hold_hours=c["hold_hours"],
        )
        res["candidate"] = c["name"]
        rows.append(res)

    df = pd.DataFrame(rows)

    print("\n=== TOP CANDIDATE HEAD-TO-HEAD V1 ===\n")
    print(
        df[
            [
                "candidate",
                "threshold",
                "fib",
                "hold_hours",
                "trades",
                "win_rate",
                "avg_return",
                "final_equity",
                "max_drawdown",
                "max_losing_streak",
            ]
        ].to_string(index=False)
    )

    print("\nBest by final equity:")
    print(df.sort_values("final_equity", ascending=False).head(1).to_string(index=False))

    print("\nBest by lowest drawdown:")
    print(df.sort_values("max_drawdown", ascending=False).head(1).to_string(index=False))

    print("\nBest by win rate:")
    print(df.sort_values("win_rate", ascending=False).head(1).to_string(index=False))


if __name__ == "__main__":
    run_test()