"""Unit tests for time_utils module."""
import datetime as dt
from zoneinfo import ZoneInfo

import pytest

_UTC = ZoneInfo("UTC")
_ET = ZoneInfo("America/New_York")


def test_utc_now():
    from libs.common.time_utils import utc_now
    now = utc_now()
    assert now.tzinfo is not None


def test_to_eastern():
    from libs.common.time_utils import to_eastern
    d = dt.datetime(2026, 1, 29, 21, 5, tzinfo=_UTC)
    e = to_eastern(d)
    assert e.tzinfo is not None
    assert e.hour == 16  # 21:05 UTC = 16:05 ET (EST, UTC-5)


def test_to_utc():
    from libs.common.time_utils import to_utc
    d = dt.datetime(2026, 1, 29, 16, 5, tzinfo=_ET)
    u = to_utc(d)
    assert u.tzinfo is not None


def test_naive_datetime_rejected():
    from libs.common.time_utils import to_eastern
    with pytest.raises(ValueError):
        to_eastern(dt.datetime(2026, 1, 1))


def test_filing_time_bucket_post_market():
    from libs.common.time_utils import filing_time_bucket
    d = dt.datetime(2026, 1, 29, 21, 5, tzinfo=_UTC)
    assert filing_time_bucket(d) == "post_market"


def test_filing_time_bucket_pre_market():
    from libs.common.time_utils import filing_time_bucket
    d = dt.datetime(2026, 1, 29, 12, 0, tzinfo=_UTC)  # 7:00 AM ET
    assert filing_time_bucket(d) == "pre_market"


def test_filing_time_bucket_regular():
    from libs.common.time_utils import filing_time_bucket
    d = dt.datetime(2026, 1, 29, 15, 0, tzinfo=_UTC)  # 10:00 AM ET
    assert filing_time_bucket(d) == "regular_hours"


def test_filing_time_bucket_naive():
    from libs.common.time_utils import filing_time_bucket
    d = dt.datetime(2026, 1, 29, 21, 5)
    assert filing_time_bucket(d) == "unknown"
