"""task-2502 회귀: utils.task_id_parser SSOT export 검증.

회장 §7-2 검증 케이스:
- task-2485+1, task-2487+1, task-2494, task-1234.1 → PASS
- invalid id → FAIL

PR #47 partial merge 후 ImportError 차단 회복 evidence.
"""
from __future__ import annotations

import os as _os
import sys as _sys

# 워크트리/메인 어느 환경이든 자신의 워크스페이스 루트를 sys.path[0]에 우선 등록.
_WROOT = _os.path.dirname(_os.path.dirname(_os.path.dirname(_os.path.abspath(__file__))))
if _WROOT in _sys.path:
    _sys.path.remove(_WROOT)
_sys.path.insert(0, _WROOT)

import pytest  # noqa: E402
from utils.task_id_parser import is_valid_task_id_with_legacy  # type: ignore[import-not-found]  # noqa: E402


@pytest.mark.parametrize("task_id", [
    # V2 패턴
    "task-2494",
    "task-2485+1",
    "task-2487+1",
    "task-2469_1.2",
    "task-2469_1.2_a",
    "task-2469_1.2_a+3",
    # legacy dot-phase 패턴
    "task-1234.1",
    "task-9.1",
    "task-1234.5",
    "task-648.1.dev1",
    "task-648.1.dev1.done",
])
def test_valid_task_ids_pass(task_id):
    """회장 §7-2: 유효 task id 는 모두 True."""
    assert is_valid_task_id_with_legacy(task_id) is True, f"{task_id} should PASS"


@pytest.mark.parametrize("invalid", [
    "",
    "invalid",
    "task-",
    "task-abc",
    "TASK-1234",
    "1234",
    "not-a-task",
])
def test_invalid_task_ids_fail(invalid):
    """회장 §7-2: 무효 task id 는 모두 False."""
    assert is_valid_task_id_with_legacy(invalid) is False, f"{invalid!r} should FAIL"


def test_non_string_inputs_return_false():
    """비문자열 입력은 안전하게 False."""
    assert is_valid_task_id_with_legacy(None) is False
    assert is_valid_task_id_with_legacy(12345) is False
    assert is_valid_task_id_with_legacy(["task-2494"]) is False


def test_export_is_callable():
    """SSOT export 자체가 callable 인지 검증 (ImportError 회귀 방어)."""
    assert callable(is_valid_task_id_with_legacy)


def test_legacy_pattern_constant_exists():
    """_LEGACY_DOTPHASE_PATTERN 상수가 존재하고 compiled regex 인지 검증."""
    import re
    from utils.task_id_parser import _LEGACY_DOTPHASE_PATTERN  # type: ignore[import-not-found]
    assert isinstance(_LEGACY_DOTPHASE_PATTERN, re.Pattern)
