# -*- coding: utf-8 -*-
"""task-2686 regression — scripts/finish-task.sh ANU_CHAIR_FACING_SID 전파 검증.

회장 verbatim 7 항목 중 #4 (finish-task.sh / callback helper 경로에서 session id
누락 방지). 본 테스트는 finish-task.sh 의 callback 발사 블록이:
  - ``ANU_CHAIR_FACING_SID`` 가 설정되면 ``--chair-facing-sid`` argv 와 envelope
    3 SID 라인을 helper 에 전달하는지
  - 설정되지 않으면 미전파 (byte-additive backwards compatible) 임을
shell -x trace (또는 정적 검사) 로 확인한다.

본 테스트는 finish-task.sh 의 정적 텍스트만 검사한다 — 실제 sh 호출 없음.
완료 7 보고 #3 의 "shell -x trace" 는 보고서 부록 (텍스트 비교) 으로 대체.
"""
from __future__ import annotations

import re
from pathlib import Path

import pytest

_ROOT = Path(__file__).resolve().parents[3]
_SCRIPT = _ROOT / "scripts" / "finish-task.sh"


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


def test_finish_task_reads_anu_chair_facing_sid_env(script_text):
    assert "ANU_CHAIR_FACING_SID" in script_text, (
        "finish-task.sh 가 ANU_CHAIR_FACING_SID env var 를 참조해야 한다 (회장 verbatim #4)."
    )


def test_finish_task_passes_chair_facing_sid_to_helper(script_text):
    assert "--chair-facing-sid" in script_text, (
        "finish-task.sh 가 helper launch 에 --chair-facing-sid 인자를 전달해야 한다."
    )


def test_finish_task_injects_three_sid_envelope_lines(script_text):
    """envelope 텍스트에 3 SID 라인을 inject 하는지 확인."""
    # SID 가 설정될 때 envelope 에 추가되는 라인 (정적 텍스트로 존재 확인).
    assert "chair_facing_session_id=" in script_text
    assert "collector_session_id=" in script_text
    assert "delivery_session_id=" in script_text


def test_finish_task_helper_invocation_intact(script_text):
    """기존 helper launch 호출이 깨지지 않았는지 확인 (regression guard)."""
    assert re.search(
        r"python3\s+-m\s+dispatch\.normal_fallback_callback_helper\s+launch",
        script_text,
    ), "helper launch CLI 호출이 사라졌거나 형식이 변경됨"
    assert "--kind normal" in script_text
    assert "--owner-key" in script_text
    assert '"$T2626_ANU_KEY"' in script_text or "$T2626_ANU_KEY" in script_text


def test_finish_task_self_key_anchor_intact(script_text):
    """ANU key 상수 c119085addb0f8b7 가 보존돼야 함 (회장 verbatim 금지 7번 — Axis 0 변경)."""
    assert "c119085addb0f8b7" in script_text, "ANU key 상수 누락 (regression)"
