from __future__ import annotations

from web_core.settings.settings_schema import normalize_web_settings


def test_normalize_watchlist_from_string_and_deduplicates() -> None:
    raw = {"watchlist": "aapl, msft\nAAPL\n btc-usd "}
    out = normalize_web_settings(raw)
    assert out["watchlist"] == ["AAPL", "MSFT", "BTC-USD"]


def test_normalize_watchlist_from_list_caps_length() -> None:
    raw_list = [f"sym{i}" for i in range(60)]
    out = normalize_web_settings({"watchlist": raw_list})
    assert len(out["watchlist"]) == 40
    assert out["watchlist"][0] == "SYM0"


def test_market_preset_defaults_to_custom_on_invalid_value() -> None:
    out = normalize_web_settings({"market_preset": "not-real"})
    assert out["market_preset"] == "Custom"


def test_normalize_watchlist_splits_legacy_escaped_newline_values() -> None:
    out = normalize_web_settings({"watchlist": "AAPL\\nMSFT\\NTSLA"})
    assert out["watchlist"] == ["AAPL", "MSFT", "TSLA"]


def test_normalize_watchlist_splits_escaped_newlines_inside_list_items() -> None:
    out = normalize_web_settings({"watchlist": ["AMD\\NTSLA"]})
    assert out["watchlist"] == ["AMD", "TSLA"]


def test_display_timezone_defaults_to_central_when_invalid() -> None:
    out = normalize_web_settings({"display_timezone": "Europe/London"})
    assert out["display_timezone"] == "America/Chicago"


def test_display_timezone_accepts_supported_us_timezone() -> None:
    out = normalize_web_settings({"display_timezone": "America/Los_Angeles"})
    assert out["display_timezone"] == "America/Los_Angeles"


def test_use_24h_time_defaults_false() -> None:
    out = normalize_web_settings({})
    assert out["use_24h_time"] is False


def test_use_24h_time_normalizes_truthy_values() -> None:
    out = normalize_web_settings({"use_24h_time": "true"})
    assert out["use_24h_time"] is True
