#!/usr/bin/env bash
# Mass-storage / SCSI sniffer — adom-usb sniffer plugin (API v1). Implements: manifest, sniff.
set -euo pipefail; HERE="$(cd "$(dirname "$0")" && pwd)"
cmd="${1:-}"; shift || true
case "$cmd" in
  manifest) cat "$HERE/plugin.json";;
  sniff)
    VID="" PID="" BUSID="" TARGET="" SECONDS_N=10 OUT=""
    while [ $# -gt 0 ]; do case "$1" in --vid)VID="$2";shift 2;; --pid)PID="$2";shift 2;; --busid)BUSID="$2";shift 2;; --target)TARGET="$2";shift 2;; --seconds)SECONDS_N="$2";shift 2;; --out)OUT="$2";shift 2;; *)shift;; esac; done
    OUT="${OUT:-/tmp/adom-usb-sniffer-msc-${VID}-${PID}.pcap}"; BUS_NUM="${BUSID%%-*}"
    sudo modprobe usbmon 2>/dev/null || true
    if command -v tshark >/dev/null; then
      timeout "$SECONDS_N" tshark -i "usbmon${BUS_NUM}" -w "$OUT" -f "usb.idVendor==0x${VID} && usb.idProduct==0x${PID}" 2>/dev/null || true
      PKTS=$(tshark -r "$OUT" 2>/dev/null | wc -l | tr -d ' ')
    else PKTS=0; fi
    printf '{"ok":true,"pcap":"%s","packets":%s,"decoders":["scsi-bot", "uas"],"summary":"captured %s packets for %s:%s on %s"}\n' "$OUT" "${PKTS:-0}" "${PKTS:-0}" "$VID" "$PID" "$TARGET";;
  *) echo "usage: adom-usb-sniffer-msc manifest | sniff --vid <hex> --pid <hex> --busid <b> --target <host> [--seconds N] [--out FILE]" >&2; exit 2;;
esac
