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_v2 import get_model_ready_spot_lag_v2


def run_bucket_test():
    df = get_model_ready_spot_lag_v2().copy()

    # forward returns
    df["fwd_24h"] = df["close"].shift(-24) / df["close"] - 1
    df["fwd_48h"] = df["close"].shift(-48) / df["close"] - 1

    df = df.dropna(subset=["fwd_24h", "fwd_48h", "spread_2y_change_1d"]).copy()

    # Use qcut with duplicate edges dropped
    df["spread_bucket"] = pd.qcut(
        df["spread_2y_change_1d"],
        q=10,
        labels=False,
        duplicates="drop"
    )

    result = df.groupby("spread_bucket").agg(
        avg_fwd_24h=("fwd_24h", "mean"),
        avg_fwd_48h=("fwd_48h", "mean"),
        count=("spread_bucket", "size"),
        min_spread=("spread_2y_change_1d", "min"),
        max_spread=("spread_2y_change_1d", "max"),
    )

    print("\nAverage future returns by spread change bucket:\n")
    print(result)

    print("\nObservations per bucket:\n")
    print(df["spread_bucket"].value_counts().sort_index())


if __name__ == "__main__":
    run_bucket_test()