# pyright: reportMissingImports=false
"""task-2689 reproduction fixture: READ_ONLY_WATCHER mode contract.

Reproduces the original failure where a watcher task was force-failed for missing
git evidence (0 commits). With the new classifier, READ_ONLY_WATCHER must:
  - PASS with 0 commits (no git_evidence required)
  - FAIL when commits exist (commit forbidden)
"""
from __future__ import annotations

from utils.task_mode_classifier import (
    TaskMode,
    classify,
    is_commit_forbidden,
    requires_git_evidence,
)


_WATCHER_TASK_MD = """# task-2689

mode: read-only watcher

PR 워처가 종료된 상태를 감시한다. 코드 변경 0.
"""


def _simulate_qc_pass(mode: str, commit_count: int) -> bool:
    """Simulate QC pass/fail using the classifier-derived contract."""
    if is_commit_forbidden(mode) and commit_count > 0:
        return False  # contract violation
    if requires_git_evidence(mode) and commit_count == 0:
        return False  # missing git_evidence
    return True


def test_task_2689_classifies_as_read_only_watcher():
    assert classify("task-2689", _WATCHER_TASK_MD) == TaskMode.READ_ONLY_WATCHER


def test_watcher_does_not_require_git_evidence():
    assert requires_git_evidence(TaskMode.READ_ONLY_WATCHER) is False


def test_watcher_forbids_commits():
    assert is_commit_forbidden(TaskMode.READ_ONLY_WATCHER) is True


def test_task_2689_zero_commit_simulation_passes_qc():
    mode = classify("task-2689", _WATCHER_TASK_MD)
    assert _simulate_qc_pass(mode, commit_count=0) is True, (
        "READ_ONLY_WATCHER with 0 commits must PASS (task-2689 fix)"
    )


def test_task_2689_with_commits_fails_contract():
    mode = classify("task-2689", _WATCHER_TASK_MD)
    assert _simulate_qc_pass(mode, commit_count=1) is False, (
        "READ_ONLY_WATCHER with >=1 commit is contract violation"
    )
    assert _simulate_qc_pass(mode, commit_count=5) is False
