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 features.spot_lag_v3 import get_model_ready_spot_lag_v3


def run_backtest():

    df = get_model_ready_spot_lag_v3().copy()

    horizon = 24

    df["future_close"] = df["close"].shift(-horizon)
    df["future_min"] = df["close"].rolling(horizon).min().shift(-horizon)
    df["future_max"] = df["close"].rolling(horizon).max().shift(-horizon)

    stop = 0.0025
    spread_cost = 0.0001  # ≈1 pip

    trades = []

    prev_signal = 0

    for i, row in df.iterrows():

        signal = row["signal_direction_v3"]

        if signal != 0 and signal != prev_signal:

            entry = row["close"]

            if signal == 1:

                stop_hit = (row["future_min"] - entry) / entry < -stop
                ret = row["future_close"] / entry - 1

                if stop_hit:
                    ret = -stop

            else:

                stop_hit = (row["future_max"] - entry) / entry > stop
                ret = -(row["future_close"] / entry - 1)

                if stop_hit:
                    ret = -stop

            ret -= spread_cost

            trades.append(ret)

        prev_signal = signal

    trades = pd.Series(trades)

    print("\nTrades:", len(trades))
    print("Average return:", trades.mean())
    print("Win rate:", (trades > 0).mean())
    print("Total return:", trades.sum())


if __name__ == "__main__":
    run_backtest()