#!/usr/bin/env bash
# SHiRE Mini ARMOR OS launcher — verified 1680x1050 appliance mode.

set -Eeuo pipefail

EXPECTED_HOST="Work"
REPO="/home/shire3d/ARMOR"
TITLE="ARMOR OS - Laptop Command Station"
BOOT_VIDEO="$REPO/assets/shire_boot.mp4"

fail() {
  echo "FAIL: $1" >&2
  exit 1
}

[ "$(hostname)" = "$EXPECTED_HOST" ] ||
  fail "Expected '$EXPECTED_HOST'; found '$(hostname)'."

cd "$REPO"

[ -x ./venv/bin/python ] ||
  fail "ARMOR virtual environment is unavailable."

export DISPLAY=:0
export XAUTHORITY=/home/ray/.Xauthority
export QT_API=pyqt5
export QT_QPA_PLATFORM=xcb
export ARMOR_DISPLAY_PROFILE=laptop
export QT_AUTO_SCREEN_SCALE_FACTOR=0
export QT_ENABLE_HIGHDPI_SCALING=0
export QT_SCALE_FACTOR=1.0

[ -r "$XAUTHORITY" ] ||
  fail "Xauthority is unavailable."

xdpyinfo >/dev/null 2>&1 ||
  fail "Cannot access display $DISPLAY."

MODE="$(
  xrandr --current |
  awk '/\*/ {print $1; exit}'
)"

echo "Logical X desktop: ${MODE:-unknown}"
echo "Validating physical HDMI-2 output..."

TARGET_OUTPUT="HDMI-2"

TARGET_GEOMETRY="$(
  xrandr --current |
  awk -v output="$TARGET_OUTPUT" '
    $1 == output && $2 == "connected" {
      for (i = 3; i <= NF; i++) {
        if ($i ~ /^[0-9]+x[0-9]+\+[0-9]+\+[0-9]+$/) {
          print $i
          exit
        }
      }
    }
  '
)"

TARGET_MODE="${TARGET_GEOMETRY%%+*}"

[ "$TARGET_MODE" = "1680x1050" ] ||
  fail "HDMI-2 must be active at 1680x1050. Current HDMI-2 mode: ${TARGET_MODE:-inactive}"

PRIMARY_OUTPUT="$(
  xrandr --listmonitors |
  awk '/\+\*/ { print $NF; exit }'
)"

[ "$PRIMARY_OUTPUT" = "$TARGET_OUTPUT" ] ||
  fail "HDMI-2 must be the primary display. Current primary: ${PRIMARY_OUTPUT:-unknown}"


if pgrep -f \
  '/home/shire3d/ARMOR/venv/bin/python.*/home/shire3d/ARMOR/main.py' \
  >/dev/null 2>&1
then
  fail "ARMOR OS is already running."
fi

echo "========================================"
echo " SHIRE MINI — ARMOR OS COMMAND CORE"
echo " Host:       $(hostname)"
echo " Display:    $DISPLAY"
echo " Resolution: $MODE"
echo " Scale:      $QT_SCALE_FACTOR"
echo "========================================"

VIDEO_PID=""
VIDEO_WINDOW=""

if [ -f "$BOOT_VIDEO" ]; then
  ffplay \
    -loglevel error \
    -nostats \
    -autoexit \
    -fs \
    -noborder \
    -an \
    -window_title "SHiRE Boot" \
    "$BOOT_VIDEO" \
    </dev/null \
    >/dev/null 2>&1 &

  VIDEO_PID=$!

  for _ in $(seq 1 20); do
    VIDEO_WINDOW="$(
      wmctrl -lx |
      awk '/SHiRE Boot/ { print $1; exit }'
    )"

    [ -n "$VIDEO_WINDOW" ] && break
    sleep 0.05
  done

  if [ -n "$VIDEO_WINDOW" ]; then
    wmctrl -ir "$VIDEO_WINDOW" \
      -b add,above,fullscreen || true
  fi
fi

./venv/bin/python "$REPO/main.py" &
ARMOR_PID=$!
WINDOW=""

if [ -n "$VIDEO_PID" ]; then
  wait "$VIDEO_PID" || true
fi

for _ in $(seq 1 80); do
  if ! kill -0 "$ARMOR_PID" 2>/dev/null; then
    set +e
    wait "$ARMOR_PID"
    RC=$?
    set -e
    exit "$RC"
  fi

  WINDOW="$(
    wmctrl -lx |
    awk -v title="$TITLE" '
      index($0, title) {
        print $1
        exit
      }
    '
  )"

  [ -n "$WINDOW" ] && break
  sleep 0.25
done

if [ -n "$WINDOW" ]; then
  wmctrl -ir "$WINDOW" -b add,fullscreen || true
  wmctrl -ia "$WINDOW" || true
  sleep 2
  wmctrl -ir "$WINDOW" -b add,fullscreen || true
  echo "SHiRE Mini fullscreen active on $WINDOW."
else
  echo "WARNING: ARMOR window was not detected."
fi

wait "$ARMOR_PID"
