import pandas as pd
import statsmodels.api as sm
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 import get_model_ready_spot_lag


def build_regression_dataset():
    df = get_model_ready_spot_lag().copy()

    # Forward returns: what happens AFTER the signal
    df["fwd_return_4h"] = df["close"].shift(-4) / df["close"] - 1
    df["fwd_return_24h"] = df["close"].shift(-24) / df["close"] - 1

    # Keep only clean rows for regression
    required_cols = [
        "spread_2y_change_1d",
        "spread_10y_change_1d",
        "raw_lag_score",
        "fwd_return_4h",
        "fwd_return_24h",
    ]

    reg_df = df.dropna(subset=required_cols).reset_index(drop=True)
    return reg_df


def run_ols(y_col: str):
    df = build_regression_dataset()

    X = df[[
        "spread_2y_change_1d",
        "spread_10y_change_1d",
        "raw_lag_score",
    ]].copy()

    y = df[y_col].copy()

    X = sm.add_constant(X)

    model = sm.OLS(y, X).fit(cov_type="HAC", cov_kwds={"maxlags": 5})

    return model


if __name__ == "__main__":
    print("\n=== 4H FORWARD RETURN REGRESSION ===")
    model_4h = run_ols("fwd_return_4h")
    print(model_4h.summary())

    print("\n=== 24H FORWARD RETURN REGRESSION ===")
    model_24h = run_ols("fwd_return_24h")
    print(model_24h.summary())