import json
import subprocess
import sys

from tests.test_pixelrag_rag_candidate_replay_service import (
    _write_platform_probe_worker_receipt,
)


def test_pixelrag_source_contract_replay_worker_dry_run_reads_worker_receipts(tmp_path):
    from services.pixelrag_source_contract_replay_worker_service import (
        POLICY,
        run_pixelrag_source_contract_replay_worker,
    )

    worker_root = tmp_path / "worker"
    _write_platform_probe_worker_receipt(
        worker_root,
        platform="coupang_tw",
        manifest_id="coupang-403",
        barrier_type="access_denied",
    )
    _write_platform_probe_worker_receipt(
        worker_root,
        platform="shopee_tw",
        manifest_id="shopee-runtime-gap",
        worker_status="capture_runtime_unavailable_structured_fallback_package",
        barrier_type="traffic_verification_interstitial",
        capture_runtime_unavailable=True,
    )

    payload = run_pixelrag_source_contract_replay_worker(
        artifact_root=tmp_path / "visual_empty",
        platform_probe_worker_receipt_root=worker_root,
        platform=("coupang_tw", "shopee_tw"),
    )
    by_platform = {item["platform"]: item for item in payload["worker_items"]}

    assert payload["policy"] == POLICY
    assert payload["status"] == "ok"
    assert payload["execute"] is False
    assert payload["summary"]["candidate_count"] == 2
    assert payload["summary"]["ready_count"] == 2
    assert payload["summary"]["dry_run_count"] == 2
    assert payload["summary"]["capture_runtime_gap_count"] == 1
    assert payload["summary"]["writes_database_count"] == 0
    assert payload["controlled_apply"]["network_call"] is False
    assert payload["controlled_apply"]["writes_database"] is False
    assert payload["controlled_apply"]["primary_human_gate_count"] == 0
    assert payload["next_machine_action"] == (
        "run_pixelrag_source_contract_replay_worker_execute"
    )
    assert by_platform["coupang_tw"]["worker_status"] == (
        "dry_run_ready_for_source_contract_replay"
    )
    assert by_platform["coupang_tw"]["source_contract_checks"][
        "blocked_page_not_product_data"
    ] is True
    assert by_platform["shopee_tw"]["capture_runtime_unavailable"] is True


def test_pixelrag_source_contract_replay_worker_execute_writes_receipts(tmp_path):
    from services.pixelrag_source_contract_replay_worker_service import (
        run_pixelrag_source_contract_replay_worker,
    )

    worker_root = tmp_path / "worker"
    output_root = tmp_path / "source_contract_receipts"
    _write_platform_probe_worker_receipt(
        worker_root,
        platform="coupang_tw",
        manifest_id="coupang-403",
        barrier_type="access_denied",
    )

    payload = run_pixelrag_source_contract_replay_worker(
        artifact_root=tmp_path / "visual_empty",
        platform_probe_worker_receipt_root=worker_root,
        output_root=output_root,
        platform="coupang_tw",
        execute=True,
        write_receipt=True,
    )

    assert payload["status"] == "ok"
    assert payload["summary"]["executed_count"] == 1
    assert payload["summary"]["receipt_written_count"] == 1
    assert payload["controlled_apply"]["artifact_write"] is True
    assert payload["controlled_apply"]["writes_database"] is False
    assert payload["next_machine_action"] == (
        "run_marketplace_source_contract_adapter_replay_preflight"
    )
    receipt_path = (
        output_root
        / "coupang_tw"
        / "coupang-403"
        / "source_contract_replay_receipt.json"
    )
    assert receipt_path.exists()
    receipt = json.loads(receipt_path.read_text(encoding="utf-8"))
    assert receipt["worker_status"] == "executed_source_contract_replay_ready"
    assert receipt["artifact_write_performed"] is True
    assert receipt["writes_database"] is False
    assert receipt["source_contract_preview"]["source_contract_version"] == (
        "pixelrag_marketplace_source_contract_v1"
    )


def test_pixelrag_source_contract_replay_worker_cli_outputs_json(tmp_path):
    worker_root = tmp_path / "worker"
    _write_platform_probe_worker_receipt(
        worker_root,
        platform="coupang_tw",
        manifest_id="coupang-403",
        barrier_type="access_denied",
    )

    completed = subprocess.run(
        [
            sys.executable,
            "scripts/ops/run_pixelrag_source_contract_replay_worker.py",
            "--artifact-root",
            str(tmp_path / "visual_empty"),
            "--platform-probe-worker-receipt-root",
            str(worker_root),
            "--platform",
            "coupang_tw",
        ],
        capture_output=True,
        check=False,
        text=True,
    )

    assert completed.returncode == 0
    payload = json.loads(completed.stdout)
    assert payload["summary"]["candidate_count"] == 1
    assert payload["summary"]["ready_count"] == 1
    assert payload["controlled_apply"]["writes_database"] is False


def test_pixelrag_source_contract_replay_worker_route_returns_readback(tmp_path, monkeypatch):
    from flask import Flask
    from routes import system_public_routes as routes
    from services import pixelrag_source_contract_replay_worker_service as service

    worker_root = tmp_path / "worker"
    _write_platform_probe_worker_receipt(
        worker_root,
        platform="coupang_tw",
        manifest_id="coupang-403",
        barrier_type="access_denied",
    )
    monkeypatch.setattr(
        service,
        "DEFAULT_PLATFORM_PROBE_WORKER_RECEIPT_ROOT",
        str(worker_root),
    )

    app = Flask(__name__)
    with app.test_request_context(
        "/api/ai-automation/pixelrag-source-contract-replay-worker?platform=coupang_tw"
    ):
        response = routes.ai_automation_pixelrag_source_contract_replay_worker_api.__wrapped__()
    payload = response.get_json()

    assert payload["policy"] == "controlled_pixelrag_source_contract_replay_worker_v1"
    assert payload["summary"]["candidate_count"] == 1
    assert payload["summary"]["ready_count"] == 1
    assert payload["controlled_apply"]["writes_database"] is False
