"""Config-parse тесты для own_developer_ids (#1169 PR1, ТЗ §25.3).

Критично: own_developer_ids СТРОГО default [] (пусто), НИ ОДНОГО реального id в коде.
OWN_DEVELOPER_IDS читается из env как comma-separated → list[int]; пусто/не задано → [].
Пустой список = §25.3 own-portfolio деградирует изящно (proxy/None), а не падает.
"""

from __future__ import annotations

from app.core.config import Settings


def test_own_developer_ids_empty_by_default() -> None:
    """Default [] — ни одного id не зашито; §25.3 деградирует изящно без конфигурации."""
    s = Settings(_env_file=None)  # type: ignore[call-arg]
    assert s.own_developer_ids == []


def test_own_developer_ids_parses_comma_separated(monkeypatch) -> None:
    """'12345,67890,42' → [12345, 67890, 42] (fake-id, не реальные)."""
    monkeypatch.setenv("OWN_DEVELOPER_IDS", "12345,67890,42")
    s = Settings(_env_file=None)  # type: ignore[call-arg]
    assert s.own_developer_ids == [12345, 67890, 42]


def test_own_developer_ids_trims_whitespace_and_skips_empties(monkeypatch) -> None:
    """' 12345 , 67890 ,, ' → [12345, 67890] (trim + пропуск пустых токенов)."""
    monkeypatch.setenv("OWN_DEVELOPER_IDS", " 12345 , 67890 ,, ")
    s = Settings(_env_file=None)  # type: ignore[call-arg]
    assert s.own_developer_ids == [12345, 67890]


def test_own_developer_ids_empty_string_is_empty_list(monkeypatch) -> None:
    """Пустая строка env → [] (а не падение / [0])."""
    monkeypatch.setenv("OWN_DEVELOPER_IDS", "")
    s = Settings(_env_file=None)  # type: ignore[call-arg]
    assert s.own_developer_ids == []


def test_own_developer_ids_single_value(monkeypatch) -> None:
    """Один id без запятой → [12345]."""
    monkeypatch.setenv("OWN_DEVELOPER_IDS", "12345")
    s = Settings(_env_file=None)  # type: ignore[call-arg]
    assert s.own_developer_ids == [12345]


def test_own_developer_ids_accepts_list_input() -> None:
    """list-вход (JSON-env / прямая инициализация) нормализуется в list[int]."""
    s = Settings(_env_file=None, own_developer_ids=[12345, 67890])  # type: ignore[call-arg]
    assert s.own_developer_ids == [12345, 67890]
