import json

import pytest

from pypos.modules.platform_ops.services.fleet_rollout_gate_service import FleetRolloutGateService

# edited by glg
pytestmark = [pytest.mark.unit]


def test_evaluate_metrics_file_continue(tmp_path):
    payload = {
        "wave": "canary",
        "config_version": "cfg-2026.04.03",
        "error_rate_pct": 1.2,
        "p95_latency_ms": 850,
    }
    metrics_file = tmp_path / "metrics.json"
    metrics_file.write_text(json.dumps(payload), encoding="utf-8")

    service = FleetRolloutGateService()
    result = service.evaluate_metrics_file(str(metrics_file), fail_threshold_pct=2.0, latency_threshold_ms=2000.0)

    assert result["decision"] == "continue"
    assert result["healthy"] is True
    assert result["wave"] == "canary"


def test_evaluate_metrics_file_halt_and_rollback(tmp_path):
    payload = {
        "wave": "wave_20",
        "config_version": "cfg-2026.04.03",
        "metrics": [
            {"branch_id": 1, "error_rate_pct": 1.0, "p95_latency_ms": 900},
            {"branch_id": 2, "error_rate_pct": 4.5, "p95_latency_ms": 2800},
        ],
    }
    metrics_file = tmp_path / "metrics_bad.json"
    metrics_file.write_text(json.dumps(payload), encoding="utf-8")

    service = FleetRolloutGateService()
    result = service.evaluate_metrics_file(str(metrics_file), fail_threshold_pct=2.0, latency_threshold_ms=2000.0)

    assert result["decision"] == "halt_and_rollback"
    assert result["healthy"] is False
    assert int(result["sample_count"]) == 2


def test_evaluate_metrics_file_parse_failure_raise_json_error(tmp_path):
    metrics_file = tmp_path / "metrics_invalid.json"
    metrics_file.write_text("{invalid_json", encoding="utf-8")

    service = FleetRolloutGateService()
    with pytest.raises(json.JSONDecodeError):
        service.evaluate_metrics_file(str(metrics_file), fail_threshold_pct=2.0, latency_threshold_ms=2000.0)
