"""Heltec USB OTG CDC vs ESP32-S3 USB-Serial/JTAG (shared PHY).

Good cabinet CDC is 303a:0002 / ttyACM0. JTAG-only 303a:1001 also creates
ttyACM0 — that is not Topbox. Host usbreset 303a:1001 can remount OTG.
Never usbreset 303a:0002 (self-powered Heltec, cable VBUS pin 1 open).
"""

from __future__ import annotations

CDC_VIDPID = "303a:0002"
JTAG_VIDPID = "303a:1001"

# What DF should do given an lsusb blob.
ACTION_OPEN_CDC = "open_cdc"
ACTION_USBRESET_JTAG = "usbreset_jtag"
ACTION_WAIT = "wait"


def cdc_on_bus(lsusb_blob: str) -> bool:
    return CDC_VIDPID in (lsusb_blob or "").lower()


def jtag_on_bus(lsusb_blob: str) -> bool:
    return JTAG_VIDPID in (lsusb_blob or "").lower()


def usb_action(lsusb_blob: str) -> str:
    """Decide reconnect action. Prefer CDC if both IDs appear (do not usbreset)."""
    blob = (lsusb_blob or "").lower()
    cdc = cdc_on_bus(blob)
    jtag = jtag_on_bus(blob)
    if jtag and not cdc:
        return ACTION_USBRESET_JTAG
    if cdc:
        return ACTION_OPEN_CDC
    return ACTION_WAIT
