import yaml
from capture_reader import iter_frames
from mqtt_publisher import MQTTPublisher
from ota_updater import OTAUpdater
from scrapers import alaris_gwnet, plum_serial, spectrum_telnet

SCRAPERS = [alaris_gwnet.parse, plum_serial.parse, spectrum_telnet.parse]

cfg = yaml.safe_load(open("config.yaml"))

pub = MQTTPublisher(cfg["mqtt"]["host"], cfg["mqtt"]["port"],
                    cfg["mqtt"]["topic_prefix"])
ota = OTAUpdater(cfg["ota"])

def handle_frame(raw: bytes):
    matched = False
    for parse in SCRAPERS:
        ev = parse(raw)
        if ev:
            matched = True
            print("Parsed event:", ev)
            pub.publish(ev["device_id"], ev)
            print("Published event for device:", ev["device_id"])
            break
    if not matched:
        print("No parser matched this frame")

def main():
    cap_cfg = cfg["capture"]
    pcap_path = cap_cfg.get("pcap_file", cap_cfg)
    for i, raw in enumerate(iter_frames(pcap_path), start=1):
        print(f"Processing frame #{i}")
        handle_frame(raw)
        ota.poll_if_due()

