#!/bin/sh
set -eu

PROGRAM=mtaild-preflight
EXPECTED_TAILSCALE_VERSION=1.102.3
TAILSCALE_BIN=/usr/local/libexec/mtail/tailscale
TAILSCALED_BIN=/usr/local/libexec/mtail/tailscaled

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

command -v systemctl >/dev/null 2>&1 || fail "systemctl não está disponível"
[ -x "$TAILSCALE_BIN" ] || fail "cliente MTail pinado não é executável: $TAILSCALE_BIN"
[ -x "$TAILSCALED_BIN" ] || fail "daemon MTail pinado não é executável: $TAILSCALED_BIN"

TAILSCALE_VERSION=$($TAILSCALE_BIN version 2>/dev/null | sed -n '1p')
[ "$TAILSCALE_VERSION" = "$EXPECTED_TAILSCALE_VERSION" ] || \
  fail "tailscale $EXPECTED_TAILSCALE_VERSION é obrigatório; encontrado: ${TAILSCALE_VERSION:-versão desconhecida}"
TAILSCALED_VERSION=$($TAILSCALED_BIN --version 2>/dev/null | sed -n '1p')
[ "$TAILSCALED_VERSION" = "$EXPECTED_TAILSCALE_VERSION" ] || \
  fail "tailscaled $EXPECTED_TAILSCALE_VERSION é obrigatório; encontrado: ${TAILSCALED_VERSION:-versão desconhecida}"

[ -c /dev/net/tun ] || fail "/dev/net/tun não é um dispositivo TUN disponível"

if systemctl is-active --quiet tailscaled.service 2>/dev/null || \
   systemctl is-enabled --quiet tailscaled.service 2>/dev/null; then
  fail "tailscaled.service está ativo ou habilitado; execute 'systemctl disable --now tailscaled.service' após confirmar a migração"
fi

if [ -S /run/tailscale/tailscaled.sock ]; then
  fail "o socket /run/tailscale/tailscaled.sock já existe; outro daemon Tailscale pode estar em execução"
fi
