#!/bin/bash
# ============================================================================
# deckstart.sh – Startet den ulanzi-niri Daemon + Button-Monitor
# ============================================================================
#
# Dieses Skript wird von der Gambas-GUI (FMain) aufgerufen, um:
#   1. Alte Instanzen von ulanzi-niri und ulanziread zu beenden
#   2. Den ulanzi-niri Daemon zu starten (verwaltet Display + HID-Protokoll)
#   3. ulanziread parallel auf demselben /dev/hidrawN zu starten
#      (liest Tastendrücke und schreibt sie nach /tmp/ulanzi-buttons)
#
# Das HID-Device wird automatisch erkannt: Es sucht in /dev/hidraw*
# nach dem Gerät mit ID_MODEL=ulanzi (via udevadm).
#
# Daemon- und Monitor-Prozesse werden mit setsid+nohup gestartet, damit
# sie auch dann weiterleben, wenn die aufrufende GUI-Shell endet oder
# ein SIGHUP den Prozessgruppen erreicht. Ausgaben gehen in Log-Dateien
# unter /tmp, damit Fehler diagnositzierbar sind (nicht mehr /dev/null).
# ============================================================================

LOG="/tmp/ulanzi-debug.log"
DLOG="/tmp/ulanzi-daemon.log"
echo "=== deckstart $(date) ===" > "$LOG"
echo "=== deckstart $(date) ===" >> "$DLOG"

# -----------------------------------------------------------
# 1. Alte Prozesse beenden
# -----------------------------------------------------------
killall ulanzi-niri ulanziread 2>/dev/null
echo "killed old processes" >> "$LOG"

# -----------------------------------------------------------
# 2. Ulanzi-HID-Device automatisch erkennen
#    Scannt /dev/hidraw* und sucht nach dem Eintrag "ID_MODEL=ulanzi"
# -----------------------------------------------------------
DEV=""
for d in /dev/hidraw*; do
  if udevadm info "$d" 2>/dev/null | grep -q "ID_MODEL=ulanzi"; then
    DEV="$d"
    break
  fi
done

# Wenn kein Device gefunden wurde, abbrechen
if [ -z "$DEV" ]; then
  echo "ERROR: no Ulanzi hidraw device found" >> "$LOG"
  exit 1
fi
echo "using device: $DEV" >> "$LOG"

# -----------------------------------------------------------
# 3. Daemon starten (im Hintergrund, eigener Sessions-Header)
# -----------------------------------------------------------
setsid nohup ulanzi-niri run >> "$DLOG" 2>&1 &
echo "daemon started: $!" >> "$LOG"

# Kurz warten, damit der Daemon initialisieren kann
sleep 2

# -----------------------------------------------------------
# 4. Button-Monitor starten
#    ulanziread liest vom HID-Device, jede erkannte Taste wird
#    nach /tmp/ulanzi-buttons geschrieben (überschreibt die Datei).
# -----------------------------------------------------------
DIR="$(dirname "$0")"
setsid nohup bash -c '"$0" "$1" | while read code; do
  echo "$code" > /tmp/ulanzi-buttons
  echo "button: $code" >> "$2"
done' "$DIR/ulanziread" "$DEV" "$LOG" > /dev/null 2>&1 &
echo "monitor started" >> "$LOG"