from __future__ import annotations

import json
from pathlib import Path

from src.tools.tradingview_alert_proof import assess_alert_proof, update_preflight_alert_evidence


def _write(path: Path, payload: dict) -> None:
    path.parent.mkdir(parents=True, exist_ok=True)
    path.write_text(json.dumps(payload), encoding="utf-8")


def test_alert_proof_accepts_all_sent_smoke(tmp_path):
    report = tmp_path / "reports" / "telegram_alert_smoke_latest.json"
    _write(report, {"status": "ok", "secrets_sent": False, "alerts": [{"name": "info", "sent": True}, {"name": "kill_switch", "sent": True}]})

    proof = assess_alert_proof(report)

    assert proof["alerts_proven"] is True
    assert proof["blockers"] == []


def test_alert_proof_blocks_disabled_or_partial_smoke(tmp_path):
    report = tmp_path / "reports" / "telegram_alert_smoke_latest.json"
    _write(report, {"status": "skipped", "secrets_sent": False, "alerts": [{"name": "info", "sent": False, "reason": "disabled"}]})

    proof = assess_alert_proof(report)

    assert proof["alerts_proven"] is False
    assert "alert_smoke_not_ok" in proof["blockers"]
    assert "alert_not_sent:info" in proof["blockers"]


def test_update_preflight_alert_evidence_sets_boolean_and_details(tmp_path):
    preflight = tmp_path / "reports" / "preflight_evidence_latest.json"
    _write(preflight, {"tests_green": True, "telegram_alerts_tested": False})
    report = tmp_path / "reports" / "telegram_alert_smoke_latest.json"
    _write(report, {"status": "ok", "secrets_sent": False, "alerts": [{"name": "info", "sent": True}]})

    result = update_preflight_alert_evidence(runtime_dir=tmp_path, alert_report_path=report)
    updated = json.loads(preflight.read_text(encoding="utf-8"))

    assert result["alerts_proven"] is True
    assert updated["telegram_alerts_tested"] is True
    assert updated["telegram_alert_proof"]["alerts_proven"] is True
