"""
test_finish_task_stash_lifecycle_2569.py
MT-T2: RC-3 검증 (finish-task.sh stash audit)
  - _STASH_AUDIT_BEFORE / _STASH_AUDIT_AFTER 박제 라인 존재
  - stash 누적 5개 초과 시 WARN 출력 로직 존재
  - cleanup-audit.jsonl 출력 경로 명시
  - bash -n 문법 검증
"""
import subprocess
from pathlib import Path

import pytest

WORKSPACE = Path(__file__).resolve().parents[2]
FINISH_TASK_SH = WORKSPACE / "scripts" / "finish-task.sh"


@pytest.fixture(scope="module")
def finish_task_content() -> str:
    assert FINISH_TASK_SH.exists(), f"finish-task.sh 없음: {FINISH_TASK_SH}"
    return FINISH_TASK_SH.read_text(encoding="utf-8")


# ── 테스트 1: BEFORE/AFTER 박제 라인 존재 ────────────────────────────────────

def test_finish_task_has_stash_audit_block(finish_task_content: str):
    """finish-task.sh에 _STASH_AUDIT_BEFORE 및 _STASH_AUDIT_AFTER 박제 라인이 있어야 한다."""
    assert "_STASH_AUDIT_BEFORE" in finish_task_content, (
        "_STASH_AUDIT_BEFORE 변수가 finish-task.sh에 없습니다. "
        "RC-3 stash audit 구현을 확인하세요."
    )
    assert "_STASH_AUDIT_AFTER" in finish_task_content, (
        "_STASH_AUDIT_AFTER 변수가 finish-task.sh에 없습니다. "
        "RC-3 stash audit 구현을 확인하세요."
    )


# ── 테스트 2: stash 누적 5개 초과 WARN 출력 로직 ─────────────────────────────

def test_finish_task_warns_on_stash_accumulation(finish_task_content: str):
    """finish-task.sh에 stash 누적 5개 초과 시 WARN 출력 로직이 있어야 한다."""
    has_warn_text = "stash 누적 감지" in finish_task_content
    # -gt 5 패턴: _STASH_AUDIT_BEFORE 또는 STASH_COUNT 관련 변수
    has_gt_5 = "-gt 5" in finish_task_content

    assert has_warn_text or has_gt_5, (
        "finish-task.sh에 stash 누적 5개 초과 경고 로직이 없습니다. "
        "'stash 누적 감지' 텍스트 또는 '-gt 5' 조건 중 하나가 필요합니다."
    )


# ── 테스트 3: cleanup-audit.jsonl 출력 경로 명시 ──────────────────────────────

def test_finish_task_audit_writes_jsonl(finish_task_content: str):
    """finish-task.sh에 cleanup-audit.jsonl 출력 경로가 명시되어 있어야 한다."""
    assert "cleanup-audit.jsonl" in finish_task_content, (
        "finish-task.sh에 'cleanup-audit.jsonl' 경로가 없습니다. "
        "RC-3 audit log 구현을 확인하세요."
    )


# ── 테스트 4: bash 문법 검증 ───────────────────────────────────────────────────

def test_finish_task_bash_syntax_valid():
    """bash -n으로 finish-task.sh 문법 오류가 없어야 한다."""
    result = subprocess.run(
        ["bash", "-n", str(FINISH_TASK_SH)],
        capture_output=True,
        text=True,
    )
    assert result.returncode == 0, (
        f"finish-task.sh 문법 오류:\n{result.stderr}"
    )
