#!/usr/bin/env python3
"""Tiny MQTT topic freshness checker.

Install paho-mqtt first:
  python3 -m pip install paho-mqtt
"""

from __future__ import annotations

import argparse
import json
import time

import paho.mqtt.client as mqtt


def main() -> None:
    parser = argparse.ArgumentParser()
    parser.add_argument("--host", default="localhost")
    parser.add_argument("--topic", default="home/#")
    parser.add_argument("--timeout", type=int, default=20)
    args = parser.parse_args()

    seen: dict[str, float] = {}

    def on_message(_client, _userdata, message):
        seen[message.topic] = time.time()

    client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
    client.on_message = on_message
    client.connect(args.host, 1883, 60)
    client.subscribe(args.topic)
    client.loop_start()

    deadline = time.time() + args.timeout
    while time.time() < deadline:
        time.sleep(0.25)

    client.loop_stop()
    client.disconnect()

    print(json.dumps({
        "topic_filter": args.topic,
        "messages_seen": len(seen),
        "fresh_topics": sorted(seen),
        "ok": bool(seen),
    }, indent=2))


if __name__ == "__main__":
    main()
