#!/bin/sh
set -eu

PROGRAM=mtail-uninstall
INSTALL_PATH=/usr/local/bin/mtail
UNINSTALL_PATH=/usr/local/sbin/mtail-uninstall
UNIT_PATH=/etc/systemd/system/mtaild.service
LIBEXEC_DIR=/usr/local/libexec/mtail
STATE_PATH=/var/lib/mtail
RUNTIME_PATH=/run/mtail
PURGE_STATE=0

fail() {
  printf '%s: erro: %s\n' "$PROGRAM" "$*" >&2
  exit 1
}

usage() {
  cat <<'EOF'
Uso: sudo mtail-uninstall [--purge-state]

Remove o binário, o runtime privado e o serviço MTail. A identidade em
/var/lib/mtail é preservada por padrão. --purge-state a apaga definitivamente.
EOF
}

while [ "$#" -gt 0 ]; do
  case "$1" in
    --purge-state)
      PURGE_STATE=1
      shift
      ;;
    -h|--help)
      usage
      exit 0
      ;;
    *)
      fail "opção desconhecida: $1"
      ;;
  esac
done

[ "$(id -u)" -eq 0 ] || fail "execute como root"
[ "$(uname -s)" = Linux ] || fail "somente Linux é suportado"
[ -d /run/systemd/system ] || fail "systemd não está executando neste host"
command -v systemctl >/dev/null 2>&1 || fail "dependência ausente: systemctl"

if systemctl is-active --quiet mtaild.service 2>/dev/null; then
  systemctl stop mtaild.service || fail "não foi possível parar mtaild.service"
fi
if systemctl is-enabled --quiet mtaild.service 2>/dev/null; then
  systemctl disable mtaild.service || fail "não foi possível desabilitar mtaild.service"
fi

rm -f -- \
  "$UNIT_PATH" "$INSTALL_PATH" \
  "$LIBEXEC_DIR/tailscale" "$LIBEXEC_DIR/tailscaled" \
  "$LIBEXEC_DIR/mtaild-preflight" "$LIBEXEC_DIR/mtaild-mark-start" "$LIBEXEC_DIR/mtaild-cleanup"
rmdir "$LIBEXEC_DIR" >/dev/null 2>&1 || true
systemctl daemon-reload
systemctl reset-failed mtaild.service >/dev/null 2>&1 || true
rmdir "$RUNTIME_PATH" >/dev/null 2>&1 || true

if [ "$PURGE_STATE" -eq 1 ]; then
  rm -rf -- "$STATE_PATH"
  printf '%s: MTail removido; estado apagado de %s\n' "$PROGRAM" "$STATE_PATH"
else
  printf '%s: MTail removido; estado preservado em %s\n' "$PROGRAM" "$STATE_PATH"
fi

rm -f -- "$UNINSTALL_PATH"
printf '%s: tailscaled.service não foi alterado\n' "$PROGRAM"
