from __future__ import annotations

import argparse
import json
import socket
import sys

from agent_guard.config import load_config
from agent_guard.events import Event


def send_event(event: Event) -> int:
    cfg = load_config()
    payload = json.dumps({"type": "event", "event": event.__dict__}).encode()
    with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as sock:
        sock.connect(str(cfg.socket_path))
        sock.sendall(payload + b"\n")
    return 0


def main(argv: list[str] | None = None) -> int:
    parser = argparse.ArgumentParser(prog="agentctl")
    sub = parser.add_subparsers(dest="cmd", required=True)
    alarm = sub.add_parser("alarm")
    alarm.add_argument("--name", required=True)
    alarm.add_argument("--status", required=True)
    alarm.add_argument("--value", required=True)
    args = parser.parse_args(argv)
    if args.cmd == "alarm":
        tier = "critical" if args.status.upper() == "CRITICAL" else "warning"
        actions = ["Dismiss"]
        remediation = "none"
        if args.name.startswith("mem_") or "mem" in args.name:
            actions = ["Kill culprit", "Dismiss"]
            remediation = "kill"
        elif "tmpfs" in args.name:
            actions = ["Clean /tmp (safe)", "Dismiss"]
            remediation = "clean"
        return send_event(Event(tier, "netdata", f"{args.name} {args.status} value={args.value}", actions=actions, remediation=remediation))
    return 2


if __name__ == "__main__":
    sys.exit(main())
