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 ingestion.rates_loader import load_rates


def build_spread_features():
    df = load_rates().copy()
    df = df.sort_values("date").reset_index(drop=True)

    # 2Y features
    df["spread_2y_change_1d"] = df["spread_2y"].diff()
    df["spread_2y_change_5d"] = df["spread_2y"] - df["spread_2y"].shift(5)

    mean_2y = df["spread_2y"].rolling(20, min_periods=20).mean()
    std_2y = df["spread_2y"].rolling(20, min_periods=20).std()
    df["spread_2y_zscore_20d"] = (df["spread_2y"] - mean_2y) / std_2y

    # 10Y features
    df["spread_10y_change_1d"] = df["spread_10y"].diff()
    df["spread_10y_change_5d"] = df["spread_10y"] - df["spread_10y"].shift(5)

    mean_10y = df["spread_10y"].rolling(20, min_periods=20).mean()
    std_10y = df["spread_10y"].rolling(20, min_periods=20).std()
    df["spread_10y_zscore_20d"] = (df["spread_10y"] - mean_10y) / std_10y

    return df


if __name__ == "__main__":
    spreads = build_spread_features()

    print(spreads.head())
    print(spreads.tail())
    print("\nDate range:", spreads["date"].min(), "to", spreads["date"].max())
    print("Rows:", len(spreads))
    print("\nColumns:")
    print(spreads.columns.tolist())