#!/usr/bin/env bash
# tv-backup-packages.sh – Paketlisten sichern (vor jedem Aufräumen ausführen!)
#
#   ./tv-backup-packages.sh             # legt tv-pakete-JJJJMMTT-HHMMSS/ an
#   ./tv-backup-packages.sh zielordner  # eigener Ordnername
#
# Inhalt des Ordners:
#   alle.txt          alle Pakete des Benutzers 0
#   system.txt        Systempakete (pm list packages -s)
#   eigene.txt        selbst installierte Pakete (-3)
#   deaktiviert.txt   deaktivierte Pakete (-d)
#   entfernt.txt      für den Benutzer entfernt, aber noch im System vorhanden
#   geraet.txt        Modell, Android-Version, Build
# Die Listen lassen sich später vergleichen (diff) und als Eingabe für tv-debloat-undo.sh nutzen.
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck source=tv-lib.sh
. "$SCRIPT_DIR/tv-lib.sh"

case "${1:-}" in
  -h|--help) sed -n '2,13p' "$0" | sed 's/^# \{0,1\}//'; exit 0 ;;
esac

dir="${1:-tv-pakete-$(date +%Y%m%d-%H%M%S)}"
tv_connect
mkdir -p "$dir"

list() { tv_out pm list packages "$@" --user "$TV_USER" | sed 's/^package://' | sort; }

list      > "$dir/alle.txt"
list -s   > "$dir/system.txt"
list -3   > "$dir/eigene.txt"
list -d   > "$dir/deaktiviert.txt"
list -u   > "$dir/bekannt.tmp"
# entfernt = bekannt, aber nicht mehr installiert
comm -23 "$dir/bekannt.tmp" "$dir/alle.txt" > "$dir/entfernt.txt"
rm -f "$dir/bekannt.tmp"

{
  printf 'Modell          %s\n' "$(tv_out getprop ro.product.model)"
  printf 'Android-Version %s\n' "$(tv_out getprop ro.build.version.release)"
  printf 'Build           %s\n' "$(tv_out getprop ro.build.display.id)"
  printf 'Gesichert       %s\n' "$(date '+%Y-%m-%d %H:%M:%S')"
} > "$dir/geraet.txt"

for f in alle system eigene deaktiviert entfernt; do
  printf '%-16s %s Pakete\n' "$f.txt" "$(wc -l < "$dir/$f.txt" | tr -d ' ')"
done
tv_info "Gesichert in: $dir"
