"""extend.py: your turn, add a COMPOSITE ALERT to the dashboard (reduce alert fatigue).

The dashboard in ../solution/dashboard.py flags every breaching signal. But paging on any single one is
noisy: a brief latency spike or a momentary saturation blip is usually nothing. A composite alert pages
only when SEVERAL golden signals breach at once, which is the shape of a real incident.

Steps:
  1. Finish `composite_alert` below: given the dashboard signals, count how many are breaching (reuse
     the same THRESHOLDS as the solution) and return True only if at least `min_breaches` are over.
  2. Run:  python extend.py
  3. Confirm a single breach does NOT page, but the multi-breach window DOES.

The worked dashboard (compute, render, THRESHOLDS) is in ../solution/dashboard.py.
"""
import sys
import os

sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "solution"))
from dashboard import compute, THRESHOLDS


def breaching_signals(signals):
    """Return the names of the golden signals currently over threshold."""
    out = []
    if signals["p95_ms"] > THRESHOLDS["p95_ms"]:
        out.append("p95")
    if signals["error_rate"] > THRESHOLDS["error_rate"]:
        out.append("error_rate")
    if signals["saturation"] > THRESHOLDS["saturation"]:
        out.append("saturation")
    if signals["slo_burn"] > THRESHOLDS["slo_burn"]:
        out.append("slo_burn")
    return out


def composite_alert(signals, min_breaches=2):
    """Page only when at least `min_breaches` golden signals breach at once."""
    # TODO: return True if len(breaching_signals(signals)) >= min_breaches, else False
    raise NotImplementedError("implement the composite alert")


if __name__ == "__main__":
    # one breach only (slow p95, but no errors / saturation / burn): should NOT page
    one = compute([{"latency_ms": 3000, "ok": True} for _ in range(5)], capacity=100)
    # many breaches (errors + burn + slow): SHOULD page
    many = compute([{"latency_ms": 5000, "ok": False} for _ in range(5)], capacity=5)
    print("one breach  -> breaching:", breaching_signals(one), "| page?", composite_alert(one))
    print("many breaches -> breaching:", breaching_signals(many), "| page?", composite_alert(many))
    # Goal: one breach -> page? False ; many breaches -> page? True
