#!/usr/bin/env python3
"""Read MST + SLV handshake lines and print loaded stack versions."""

from __future__ import annotations

import argparse
import sys

from pog422_fixture_core import (
    EXPECTED_XR_DRIVER_VERSION,
    probe_component_versions,
    probe_hat_session,
    resolve_channel,
    resolve_serial_port,
)


def main() -> int:
    parser = argparse.ArgumentParser(description="POG422 hat / driver version probe")
    parser.add_argument("--port", default=None, help="any ttyXRUSB* (optional)")
    parser.add_argument("--fixture-pos", type=int, default=0)
    args = parser.parse_args()

    channel = resolve_channel("machine")
    port = resolve_serial_port(channel, args.port)
    print(f"port={port}")

    probe = probe_hat_session(port)
    vers = probe_component_versions()
    print(f"driver_module={vers.get('driver_module')}")
    print(f"driver_version_loaded(sysfs)={vers.get('driver_version_loaded')!r}")
    print(f"driver_version_installed(modinfo)={vers.get('driver_version_installed')!r}")
    print(f"driver_version_mismatch={vers.get('driver_version_mismatch')}")
    print(f"driver_version={vers.get('driver_version')!r}  # used for ok checks (= loaded)")
    print(f"driver_version_expected={EXPECTED_XR_DRIVER_VERSION!r}")
    print(f"driver_version_ok={vers.get('driver_version_ok')}")
    print(f"uartd_version_client={vers.get('uartd_version_client')!r}")
    print(f"inject_version_client={vers.get('inject_version_client')!r}")
    print(f"component_versions_ok={vers.get('component_versions_ok')}")
    if vers.get("driver_version_mismatch"):
        print(
            "FAIL: on-disk .ko != running module — "
            "cat /sys/module/xr_usb_serial_common/version  (not plain modinfo)",
            file=sys.stderr,
        )
        return 2
    if not vers.get("driver_version_ok"):
        print(
            f"WARN: loaded driver is not {EXPECTED_XR_DRIVER_VERSION} — "
            "run install_pi.sh, unplug → modprobe -r/-a → replug, "
            "then: cat /sys/module/xr_usb_serial_common/version",
            file=sys.stderr,
        )
        return 2
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
