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_v2 import get_model_ready_spot_lag_v2


def build_regression_dataset():
    df = get_model_ready_spot_lag_v2().copy()

    # Future returns
    df["fwd_return_4h"] = df["close"].shift(-4) / df["close"] - 1
    df["fwd_return_24h"] = df["close"].shift(-24) / df["close"] - 1
    df["fwd_return_48h"] = df["close"].shift(-48) / df["close"] - 1

    required_cols = [
        "lag_zscore_24h",
        "spread_2y_change_1d",
        "spread_10y_change_1d",
        "fwd_return_4h",
        "fwd_return_24h",
        "fwd_return_48h",
    ]

    df = df.dropna(subset=required_cols).reset_index(drop=True)
    return df


def run_ols(y_col: str):
    df = build_regression_dataset()

    X = df[
        [
            "lag_zscore_24h",
            "spread_2y_change_1d",
            "spread_10y_change_1d",
        ]
    ].copy()

    y = df[y_col].copy()

    X = sm.add_constant(X)

    model = sm.OLS(y, X).fit(cov_type="HAC", cov_kwds={"maxlags": 10})
    return model


def print_key_stats(model, label: str):
    print(f"\n=== {label} ===")
    print(model.summary())

    params = model.params
    pvals = model.pvalues
    tvals = model.tvalues

    print("\nKEY COEFFICIENTS:")
    for name in params.index:
        print(
            f"{name:>22} | coef={params[name]: .6f} | "
            f"t={tvals[name]: .3f} | p={pvals[name]: .6f}"
        )


if __name__ == "__main__":
    model_4h = run_ols("fwd_return_4h")
    print_key_stats(model_4h, "4H FORWARD RETURN REGRESSION")

    model_24h = run_ols("fwd_return_24h")
    print_key_stats(model_24h, "24H FORWARD RETURN REGRESSION")

    model_48h = run_ols("fwd_return_48h")
    print_key_stats(model_48h, "48H FORWARD RETURN REGRESSION")