"""task-2487+1 회귀 테스트: verifier 계층 SSOT 위임 통합."""
import os
import pytest
import importlib.util


VERIFIER_PATHS = [
    "teams/dev1/qc/verifiers/browser_verify.py",
    "teams/dev2/qc/verifiers/browser_verify.py",
    "teams/dev3/qc/verifiers/browser_verify.py",
    "teams/dev4/qc/verifiers/browser_verify.py",
    "teams/dev5/qc/verifiers/browser_verify.py",
    "teams/dev6/qc/verifiers/browser_verify.py",
    "teams/dev7/qc/verifiers/browser_verify.py",
    "teams/dev8/qc/verifiers/browser_verify.py",
    "teams/shared/verifiers/browser_verify.py",
]


WORKSPACE_ROOT = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))


@pytest.mark.parametrize("vpath", VERIFIER_PATHS)
def test_verifier_no_local_task_id_pattern(vpath):
    """verifier 9개 파일에서 자체 TASK_ID_PATTERN regex 제거 확인."""
    full = os.path.join(WORKSPACE_ROOT, vpath)
    assert os.path.isfile(full), f"missing verifier: {vpath}"
    with open(full, "r", encoding="utf-8") as f:
        content = f.read()
    assert "TASK_ID_PATTERN = re.compile" not in content, (
        f"{vpath}: 자체 TASK_ID_PATTERN 잔존 (회장 명시 1번 위반)"
    )
    assert "is_valid_task_id_with_legacy" in content, (
        f"{vpath}: SSOT compat 함수 import/호출 부재"
    )


@pytest.mark.parametrize("vpath", VERIFIER_PATHS)
@pytest.mark.parametrize("tid", [
    "task-2485+1",
    "task-2487+1",
    "task-9.1",
    "task-648.1.dev1.done",
])
def test_verifier_accepts_compat_task_ids(tmp_path, vpath, tid):
    """모든 verifier가 compat task_id를 reject하지 않는지 확인.

    실제 verify() 호출 결과는 task 파일/스크린샷 부재로 SKIP/FAIL 가능하나,
    핵심은 task_id 형식 자체로 거부되지 않는 것.
    """
    full = os.path.join(WORKSPACE_ROOT, vpath)
    spec = importlib.util.spec_from_file_location(f"bv_{vpath.replace('/', '_')}", full)
    assert spec is not None and spec.loader is not None, f"failed to load spec: {full}"
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)

    # 가짜 workspace_root 사용 (task 파일 부재 → SKIP 결과 예상)
    result = module.verify(tid, workspace_root=str(tmp_path))

    # 회귀 검증: task_id 형식 거부 결과("잘못된 task_id 형식")가 나오지 않아야 함
    if isinstance(result, dict):
        details = result.get("details", [])
        details_str = " ".join(str(d) for d in details) if isinstance(details, list) else str(details)
        assert "잘못된 task_id 형식" not in details_str, (
            f"{vpath} | {tid}: task_id 형식 거부 회귀 발생 — {details}"
        )
