#!/usr/bin/env bash
# uninstall.sh — complete undo/uninstall for this lab.
#
# Staged so you can undo just the containers, or nuke LXD entirely.
#   ./uninstall.sh                 -> interactive, asks before each stage
#   ./uninstall.sh --yes           -> no prompts, does everything
#   ./uninstall.sh --containers    -> only deletes k8master/k8worker1
#   ./uninstall.sh --lxd-config    -> also removes bridge/pool/profile (keeps LXD installed)
#   ./uninstall.sh --purge         -> also removes the LXD snap + zfs pool + leftover network iface
set -uo pipefail

MODE="${1:-}"
confirm() {
  [[ "$MODE" == "--yes" || "$MODE" == "--purge" ]] && return 0
  read -r -p "$1 [y/N] " ans
  [[ "$ans" =~ ^[Yy]$ ]]
}

echo "=== Stage 1: Kubernetes containers ==="
if [[ "$MODE" == "--yes" || "$MODE" == "--containers" || "$MODE" == "--lxd-config" || "$MODE" == "--purge" ]] || confirm "Delete containers k8master and k8worker1?"; then
  for c in k8master k8worker1; do
    lxc info "$c" &>/dev/null && lxc delete "$c" --force && echo "  deleted $c" || echo "  $c not present, skipping"
  done
fi
[[ "$MODE" == "--containers" ]] && { echo "Done (--containers)."; exit 0; }

echo
echo "=== Stage 2: LXD config objects (profile, bridge, pool) ==="
if [[ "$MODE" == "--yes" || "$MODE" == "--lxd-config" || "$MODE" == "--purge" ]] || confirm "Remove profile 'k8s-base', bridge 'k8sbr0', and storage pool 'default'?"; then
  lxc profile delete k8s-base 2>/dev/null && echo "  removed profile k8s-base" || echo "  profile k8s-base not present"
  lxc network delete k8sbr0 2>/dev/null && echo "  removed network k8sbr0" || echo "  network k8sbr0 not present"
  lxc storage delete default 2>/dev/null && echo "  removed storage pool default" || echo "  storage pool default not present (or still in use)"
fi
[[ "$MODE" == "--lxd-config" ]] && { echo "Done (--lxd-config). LXD itself is still installed."; exit 0; }

echo
echo "=== Stage 3: Full LXD purge (snap, zfs, group, leftover interfaces) ==="
if [[ "$MODE" == "--yes" || "$MODE" == "--purge" ]] || confirm "PURGE LXD entirely (snap remove --purge, zfs pool, lxd group)? This is destructive."; then
  echo "  Stopping any remaining instances"
  lxc list -c n --format csv 2>/dev/null | xargs -r -I{} lxc delete {} --force

  echo "  Removing lingering LXD-managed zpools (if zfs pool was used)"
  if command -v zpool &>/dev/null; then
    for pool in $(zpool list -H -o name 2>/dev/null | grep -i lxd); do
      sudo zpool destroy "$pool" && echo "  destroyed zpool $pool"
    done
  fi

  echo "  Removing the LXD snap"
  sudo snap remove --purge lxd

  echo "  Removing dangling k8sbr0 bridge interface, if the snap removal left it"
  if ip link show k8sbr0 &>/dev/null; then
    sudo ip link set k8sbr0 down 2>/dev/null
    sudo ip link delete k8sbr0 type bridge 2>/dev/null
    echo "  removed leftover k8sbr0 interface"
  fi

  echo "  Removing lxd group membership for $(whoami) (log out/in to fully clear)"
  sudo gpasswd -d "$(whoami)" lxd 2>/dev/null || true

  echo "  Removing any leftover LXD directories"
  sudo rm -rf /var/snap/lxd /var/lib/lxd 2>/dev/null

  echo "Done (--purge). LXD, its bridge, its storage, and the snap are all removed."
fi
