"""Tests for the season system."""

from mudlib import seasons


def test_get_season_basic():
    assert seasons.get_season(0) == "spring"
    assert seasons.get_season(6) == "spring"
    assert seasons.get_season(7) == "summer"
    assert seasons.get_season(13) == "summer"
    assert seasons.get_season(14) == "autumn"
    assert seasons.get_season(20) == "autumn"
    assert seasons.get_season(21) == "winter"
    assert seasons.get_season(27) == "winter"


def test_get_season_wraps():
    assert seasons.get_season(28) == "spring"
    assert seasons.get_season(35) == "summer"
    assert seasons.get_season(56) == "spring"  # 2 years = 56 days


def test_get_season_negative_day():
    assert seasons.get_season(-1) == "spring"
    assert seasons.get_season(-100) == "spring"


def test_get_season_custom_days_per_season():
    # 10 days per season = 40-day year
    assert seasons.get_season(0, days_per_season=10) == "spring"
    assert seasons.get_season(9, days_per_season=10) == "spring"
    assert seasons.get_season(10, days_per_season=10) == "summer"
    assert seasons.get_season(19, days_per_season=10) == "summer"
    assert seasons.get_season(20, days_per_season=10) == "autumn"
    assert seasons.get_season(30, days_per_season=10) == "winter"
    assert seasons.get_season(40, days_per_season=10) == "spring"


def test_get_day_of_year():
    assert seasons.get_day_of_year(0) == 0
    assert seasons.get_day_of_year(27) == 27
    assert seasons.get_day_of_year(28) == 0  # new year
    assert seasons.get_day_of_year(29) == 1
    assert seasons.get_day_of_year(56) == 0  # 2 years


def test_get_day_of_year_custom_days_per_season():
    # 10 days per season = 40-day year
    assert seasons.get_day_of_year(0, days_per_season=10) == 0
    assert seasons.get_day_of_year(39, days_per_season=10) == 39
    assert seasons.get_day_of_year(40, days_per_season=10) == 0
    assert seasons.get_day_of_year(80, days_per_season=10) == 0


def test_get_season_description_grass():
    assert "green" in seasons.get_season_description("spring", "grass")
    assert "golden" in seasons.get_season_description("summer", "grass")
    assert "brown" in seasons.get_season_description("autumn", "grass")
    assert "frost" in seasons.get_season_description("winter", "grass")


def test_get_season_description_forest():
    assert "blossom" in seasons.get_season_description("spring", "forest")
    assert "canopy" in seasons.get_season_description("summer", "forest")
    assert "amber" in seasons.get_season_description("autumn", "forest")
    assert "bare" in seasons.get_season_description("winter", "forest")


def test_get_season_description_minimal_variation():
    # sand, mountain, water have minimal/no seasonal variation
    assert seasons.get_season_description("spring", "sand") == ""
    assert seasons.get_season_description("summer", "mountain") == ""
    assert seasons.get_season_description("winter", "water") == ""


def test_get_season_description_unknown_terrain():
    # unknown terrain returns empty string
    assert seasons.get_season_description("spring", "lava") == ""
    assert seasons.get_season_description("summer", "unknown") == ""


def test_seasons_constant():
    assert seasons.SEASONS == ["spring", "summer", "autumn", "winter"]


def test_days_per_season_constant():
    assert seasons.DAYS_PER_SEASON == 7
