#!/usr/bin/env bash
# tv-app.sh – Apps auflisten, starten, beenden, installieren; Links öffnen
#
#   ./tv-app.sh list                        # selbst installierte Apps (pm list packages -3)
#   ./tv-app.sh list all                    # alle Pakete
#   ./tv-app.sh start com.example.tvapp     # App über ihren TV-Starter (Leanback) öffnen
#   ./tv-app.sh stop com.example.tvapp      # App hart beenden (am force-stop)
#   ./tv-app.sh current                     # welche App ist gerade im Vordergrund?
#   ./tv-app.sh url https://example.org/    # Link/Deep-Link mit ACTION_VIEW öffnen
#   ./tv-app.sh install app.apk             # APK installieren bzw. aktualisieren (Sideload)
#   ./tv-app.sh home                        # zurück zum Startbildschirm
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck source=tv-lib.sh
. "$SCRIPT_DIR/tv-lib.sh"

usage() { sed -n '2,11p' "$0" | sed 's/^# \{0,1\}//'; exit "${1:-0}"; }

need_pkg() {
  tv_valid_package "${1:-}" || tv_die "Paketname angeben, z. B. com.example.tvapp"
}

cmd="${1:-}"
[ -n "$cmd" ] || usage 1
shift

case "$cmd" in
  list)
    tv_connect
    if [ "${1:-}" = "all" ]; then
      tv_out pm list packages --user "$TV_USER" | sed 's/^package://' | sort
    else
      tv_out pm list packages -3 --user "$TV_USER" | sed 's/^package://' | sort
    fi
    ;;
  start)
    need_pkg "${1:-}"
    tv_connect
    tv_load_packages
    [ "$(tv_pkg_state "$1")" = "aktiv" ] || tv_die "Paket $1 ist auf dem Gerät nicht aktiv."
    # TV-Apps melden ihren Starter in der Kategorie LEANBACK_LAUNCHER; monkey löst genau diesen Intent aus.
    if ! tv_out monkey -p "$1" -c android.intent.category.LEANBACK_LAUNCHER 1 | grep -q 'Events injected: 1'; then
      # Kein TV-Starter vorhanden (z. B. Telefon-App): normale Starter-Kategorie versuchen.
      tv_shell monkey -p "$1" -c android.intent.category.LAUNCHER 1 >/dev/null
    fi
    ;;
  stop)
    need_pkg "${1:-}"
    tv_connect
    tv_shell am force-stop "$1"
    ;;
  current)
    tv_connect
    # Der Name des Feldes hat sich zwischen Android-Versionen geändert.
    tv_out dumpsys activity activities | grep -E 'topResumedActivity|mResumedActivity' | head -n 1 || true
    ;;
  url)
    [ $# -eq 1 ] || usage 1
    tv_connect
    tv_shell am start -a android.intent.action.VIEW -d "$(tv_quote "$1")"
    ;;
  install)
    [ $# -eq 1 ] || usage 1
    [ -r "$1" ] || tv_die "Datei nicht lesbar: $1"
    tv_connect
    # -r: vorhandene App ersetzen und ihre Daten behalten
    tv_adb install -r "$1"
    ;;
  home)
    tv_connect
    tv_shell input keyevent KEYCODE_HOME
    ;;
  -h|--help|help) usage 0 ;;
  *) usage 1 ;;
esac
