import pandas as pd
import pytest

from psx_signal.calendar import TradingCalendar


def test_offsets_use_observed_sessions_not_calendar_days() -> None:
    calendar = TradingCalendar(pd.Series(pd.to_datetime(["2026-08-13", "2026-08-17", "2026-08-18"])))
    assert calendar.next_session("2026-08-13") == pd.Timestamp("2026-08-17")
    with pytest.raises(KeyError):
        calendar.next_session("2026-08-14")
    assert calendar.previous_session("2026-08-18") == pd.Timestamp("2026-08-17")
    assert calendar.is_trading_session("2026-08-17")
    assert not calendar.is_trading_session("2026-08-16")
    assert calendar.sessions_between("2026-08-13", "2026-08-17").tolist() == [
        pd.Timestamp("2026-08-13"), pd.Timestamp("2026-08-17")
    ]
