#!/usr/bin/env bash
# tv-maintenance.sh – Speicher, Cache, Logcat und das Debugging wieder ausschalten
#
#   ./tv-maintenance.sh storage         # freier Speicher (df -h /data)
#   ./tv-maintenance.sh memory          # Arbeitsspeicher-Übersicht (dumpsys meminfo, Kopf)
#   ./tv-maintenance.sh trim            # App-Caches leeren (pm trim-caches)
#   ./tv-maintenance.sh logcat 30       # 30 s Logcat mitschneiden → tv-logcat-….txt
#   ./tv-maintenance.sh logcat          # den vorhandenen Puffer sichern (logcat -d)
#   ./tv-maintenance.sh debug-off       # ADB am Fernseher ausschalten (trennt diese Verbindung!)
#
# Nach „debug-off“ ist der Fernseher per ADB nicht mehr erreichbar. Wieder einschalten geht nur
# am Gerät: Einstellungen → Entwickleroptionen → USB-Debugging.
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,12p' "$0" | sed 's/^# \{0,1\}//'; exit "${1:-0}"; }

case "${1:-}" in
  storage)
    tv_connect
    tv_out df -h /data
    ;;
  memory)
    tv_connect
    tv_out dumpsys meminfo | head -n 40
    ;;
  trim)
    tv_connect
    tv_info "Vorher:";  tv_out df -h /data >&2
    # Ein unerreichbar großer Zielwert leert alle App-Caches; App-Daten bleiben erhalten.
    tv_shell pm trim-caches 999G
    tv_info "Nachher:"; tv_out df -h /data >&2
    ;;
  logcat)
    out="tv-logcat-$(date +%Y%m%d-%H%M%S).txt"
    tv_connect
    if [ -n "${2:-}" ]; then
      case "$2" in *[!0-9]*) usage 1 ;; esac
      tv_info "Schneide $2 s mit …"
      tv_adb logcat -v threadtime > "$out" &
      pid=$!
      sleep "$2"
      kill "$pid" 2>/dev/null || true
      wait "$pid" 2>/dev/null || true
    else
      tv_adb logcat -d -v threadtime > "$out"
    fi
    tv_info "Gespeichert: $out ($(wc -l < "$out" | tr -d ' ') Zeilen)"
    ;;
  debug-off)
    tv_connect
    tv_info "Schalte ADB auf $TV_HOST aus – die Verbindung bricht dabei ab."
    tv_shell settings put global adb_enabled 0 || true
    "$ADB" disconnect "$TV_HOST" >/dev/null 2>&1 || true
    ;;
  -h|--help|help) usage 0 ;;
  *) usage 1 ;;
esac
