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_test(threshold=2.0):

    df = get_model_ready_spot_lag_v3().copy()

    horizons = [0,1,2,4,8,12,24]

    results = {h: [] for h in horizons}

    df = df.dropna(subset=["lag_zscore_24h_v3"]).reset_index(drop=True)

    for i in range(len(df)-24):

        row = df.iloc[i]

        signal = 0
        if row["lag_zscore_24h_v3"] >= threshold:
            signal = 1
        elif row["lag_zscore_24h_v3"] <= -threshold:
            signal = -1

        if signal == 0:
            continue

        for delay in horizons:

            entry_index = i + delay
            exit_index = entry_index + 24

            if exit_index >= len(df):
                continue

            entry = df.iloc[entry_index]["close"]
            exit_price = df.iloc[exit_index]["close"]

            if signal == 1:
                ret = exit_price / entry - 1
            else:
                ret = -(exit_price / entry - 1)

            results[delay].append(ret)

    print("\n=== SIGNAL DECAY TEST ===")

    for delay in horizons:

        trades = pd.Series(results[delay])

        if len(trades) == 0:
            continue

        print(f"\nEntry delay: {delay} hours")
        print("Trades:", len(trades))
        print("Avg return:", round(trades.mean(),6))
        print("Win rate:", round((trades>0).mean(),4))


if __name__ == "__main__":
    run_test()