"""Stdlib-only alert helper.

In production you'd plug Slack / PagerDuty / OpsGenie. For the course
we emit a structured stdout line so any log-collector (or `tee` to a
file) can pick it up. The shape mirrors what an alert webhook would
receive so swap-in is trivial.
"""

from __future__ import annotations

import json
import sys
from datetime import datetime, timezone


def alert(severity: str, source: str, message: str, **extra: object) -> None:
    """Emit a single JSON line on stdout describing an alert."""
    payload = {
        "ts": datetime.now(timezone.utc).isoformat(),
        "severity": severity.upper(),
        "source": source,
        "message": message,
        **extra,
    }
    print(json.dumps(payload), flush=True)


if __name__ == "__main__":
    # Allow `python -m observability.alerts SEV SOURCE "msg"`
    if len(sys.argv) < 4:
        print("Usage: python -m observability.alerts SEVERITY SOURCE MESSAGE",
              file=sys.stderr)
        sys.exit(1)
    sev, src, msg = sys.argv[1], sys.argv[2], sys.argv[3]
    alert(sev, src, msg)
