"""Disposable real-surface contract for NutriCoach weekly operations."""

from __future__ import annotations


import shutil
import subprocess
import sys
from pathlib import Path

from pydantic import JsonValue as PydanticJsonValue, TypeAdapter



def test_weekly_operations_disposable_cli_drives_real_telegram_surface(
    tmp_path: Path,
) -> None:
    """Given an isolated runtime, when the scenario runs, then its receipt passes."""
    repository = Path(__file__).resolve().parents[2]

    completed = subprocess.run(
        [
            sys.executable,
            str(repository / "scripts/run_nutricoach_v140_disposable_e2e.py"),
            "--network-disabled",
            "--scenario",
            "weekly-operations",
            "--verify-privacy",
            "--evidence-dir",
            str(tmp_path),
        ],
        cwd=repository,
        capture_output=True,
        check=False,
        text=True,
        timeout=60,
    )

    assert completed.returncode == 0, completed.stderr
    assert completed.stdout.strip().endswith("DISPOSABLE_WEEKLY_OPERATIONS_PASS")
    adapter: TypeAdapter[PydanticJsonValue] = TypeAdapter(PydanticJsonValue)
    receipt = adapter.validate_json(
        (tmp_path / "task-11-telegram-e2e-r3.json").read_text(encoding="utf-8")
    )
    assert isinstance(receipt, dict)
    assert receipt.get("privacy_leaks") == 0
    owner = receipt.get("owner")
    topic = receipt.get("topic59")
    assert isinstance(owner, dict) and isinstance(topic, dict)
    assert owner.get("preapproval_customer_sends") == 0
    assert owner.get("approved_customer_sends") == 1
    message_id = topic.get("message_id")
    assert isinstance(message_id, str) and message_id == topic.get("edited_message_id")
    verifier = repository / "scripts/verify_nutricoach_v140_task11_artifacts.py"
    verified = subprocess.run(
        ["uv", "run", str(verifier), "--evidence-dir", str(tmp_path)],
        cwd=repository, capture_output=True, check=False, text=True, timeout=30,
    )
    assert verified.returncode == 0, verified.stdout

    for label, name in (
        ("transcript", "task-11-transcript-r3.json"),
        ("receipt", "task-11-telegram-e2e-r3.json"),
        ("message_id", "task-11-telegram-e2e-r3.json"),
    ):
        tampered = tmp_path.parent / f"{tmp_path.name}-{label}"
        _ = shutil.copytree(tmp_path, tampered)
        path = tampered / name
        payload = path.read_text(encoding="utf-8")
        if label == "transcript":
            payload = payload.replace('"raw_sentinels_absent":true', '"raw_sentinels_absent":false', 1)
        elif label == "receipt":
            payload = payload.replace('"status":"PASS"', '"status":"FAIL"', 1)
        else:
            payload = payload.replace(
                f'"edited_message_id":"{message_id}"',
                '"edited_message_id":"999"',
                1,
            )
        _ = path.write_text(payload, encoding="utf-8")
        rejected = subprocess.run(
            ["uv", "run", str(verifier), "--evidence-dir", str(tampered)],
            cwd=repository, capture_output=True, check=False, text=True, timeout=30,
        )
        assert rejected.returncode != 0
        assert rejected.stdout.startswith("HASH_MISMATCH:")
