#!/usr/bin/env bash
# Instalador oficial do MajinBot 2.0 — https://majinbot.online
# Uso: curl -fsSL https://majinbot.online/install.sh | sudo bash
#      curl -fsSL https://majinbot.online/install.sh | sudo bash -s -- --chave SUA_CHAVE_JWT
# Tudo o que vier depois de "--" é repassado a `majinbot2 instalar`.
set -euo pipefail

BASE="${MAJINBOT_BASE:-https://majinbot.online}"
BIN="majinbot2-linux-amd64"
DESTINO="/usr/local/bin/majinbot2"
UNIT="/etc/systemd/system/majinbot2.service"
PASTA="/var/lib/majinbot2"

falha() { echo "majinbot: $*" >&2; exit 1; }

[ "$(id -u)" -eq 0 ] || falha "rode como root (sudo bash)."
[ "$(uname -s)" = "Linux" ] && [ "$(uname -m)" = "x86_64" ] || falha "só há binário linux/amd64."
for c in curl sha256sum install; do command -v "$c" >/dev/null || falha "falta o comando: $c"; done

tmp="$(mktemp -d)"
trap 'rm -rf "$tmp"' EXIT

echo "→ baixando $BIN"
curl -fsSL "$BASE/downloads/$BIN" -o "$tmp/$BIN"
curl -fsSL "$BASE/downloads/checksums.txt" -o "$tmp/checksums.txt"

echo "→ validando SHA-256"
esperado="$(awk -v b="$BIN" '$2==b || $2=="*"b {print $1}' "$tmp/checksums.txt" | head -n1)"
[ -n "$esperado" ] || falha "checksums.txt não lista $BIN."
obtido="$(sha256sum "$tmp/$BIN" | awk '{print $1}')"
[ "$esperado" = "$obtido" ] || falha "SHA-256 não confere (esperado $esperado, obtido $obtido). Nada foi instalado."

echo "→ instalando em $DESTINO (atômico)"
install -m 0755 "$tmp/$BIN" "$DESTINO.new"
mv -f "$DESTINO.new" "$DESTINO"

if command -v systemctl >/dev/null && [ -d /run/systemd/system ]; then
  mkdir -p "$PASTA"
  if [ ! -f "$UNIT" ]; then
    cat >"$UNIT" <<UNITEOF
[Unit]
Description=MajinBot 2.0 (painel + MCP)
After=network.target

[Service]
ExecStart=$DESTINO servir --end 127.0.0.1:8421 --pasta $PASTA
Restart=on-failure
RestartSec=3

[Install]
WantedBy=multi-user.target
UNITEOF
  fi
  systemctl daemon-reload
  systemctl enable majinbot2.service >/dev/null 2>&1 || true
  systemctl restart majinbot2.service
  echo "→ majinbot2.service ativo"
fi

echo "→ configurando (majinbot2 instalar)"
# via "curl | bash" o stdin é o pipe: devolve o teclado ao assistente interativo
if [ ! -t 0 ] && [ -r /dev/tty ]; then
  exec "$DESTINO" instalar "$@" </dev/tty
fi
exec "$DESTINO" instalar "$@"
