#!/bin/sh
# spectralmeter-rotate <0|90|180|270>
#
# Dreht das Kiosk-Display (Slint-Bild via SLINT_KMS_ROTATION) UND den Touch
# (libinput-Kalibriermatrix). "0" entfernt beides wieder. Wirkt nach reboot.
# Hintergrund und Fehlersuche: /usr/share/doc/spectralmeter/ROTATION.md
set -eu

DROPIN_DIR=/etc/systemd/system/spectralmeter.service.d
DROPIN="$DROPIN_DIR/rotate.conf"
RULE=/etc/udev/rules.d/99-spectralmeter-rotate.rules

DEG="${1-}"
case "$DEG" in
  0|90|180|270) ;;
  *) echo "Nutzung: spectralmeter-rotate <0|90|180|270>" >&2; exit 2 ;;
esac

if [ "$(id -u)" -ne 0 ]; then
  echo "Bitte mit sudo/root ausfuehren." >&2
  exit 1
fi

# libinput-Kalibriermatrix (affine 2x3, normierte Koordinaten) passend zum Winkel.
case "$DEG" in
  90)  MATRIX="0 -1 1 1 0 0" ;;
  180) MATRIX="-1 0 1 0 -1 1" ;;
  270) MATRIX="0 1 0 -1 0 1" ;;
esac

if [ "$DEG" = 0 ]; then
  rm -f "$DROPIN" "$RULE"
  rmdir "$DROPIN_DIR" 2>/dev/null || true
  echo "Rotation entfernt (Anzeige aufrecht)."
else
  mkdir -p "$DROPIN_DIR" "$(dirname "$RULE")"
  printf '[Service]\nEnvironment=SLINT_KMS_ROTATION=%s\n' "$DEG" > "$DROPIN"
  printf 'ENV{ID_INPUT_TOUCHSCREEN}=="1", ENV{LIBINPUT_CALIBRATION_MATRIX}="%s"\n' \
         "$MATRIX" > "$RULE"
  echo "Rotation auf ${DEG} Grad gesetzt (Bild + Touch)."
fi

systemctl daemon-reload 2>/dev/null || true
udevadm control --reload 2>/dev/null || true
echo "Bitte neu starten, damit es wirkt:  sudo reboot"
