#!/usr/bin/env bash
set -e

BASE_URL="http://ccs.linbei.de/nezha"
INSTALL_DIR="/opt/nezha/agent"

NZ_SERVER="${NZ_SERVER:-}"
NZ_CLIENT_SECRET="${NZ_CLIENT_SECRET:-}"
NZ_TLS="${NZ_TLS:-true}"
NZ_UUID="${NZ_UUID:-}"
NZ_DISABLE_AUTO_UPDATE="${NZ_DISABLE_AUTO_UPDATE:-}"
NZ_DISABLE_FORCE_UPDATE="${NZ_DISABLE_FORCE_UPDATE:-}"
NZ_DISABLE_COMMAND_EXECUTE="${NZ_DISABLE_COMMAND_EXECUTE:-}"
NZ_SKIP_CONNECTION_COUNT="${NZ_SKIP_CONNECTION_COUNT:-}"

if [[ -z "$NZ_SERVER" || -z "$NZ_CLIENT_SECRET" ]]; then
  echo "用法：NZ_SERVER=面板地址:端口 NZ_CLIENT_SECRET=密钥 [NZ_TLS=true] bash install.sh"
  exit 1
fi

arch="$(uname -m)"
os="linux"
case "$arch" in
  x86_64|amd64) pkg="nezha-agent_${os}_amd64.zip" ;;
  aarch64|arm64) pkg="nezha-agent_${os}_arm64.zip" ;;
  armv7l|armv6l|arm) pkg="nezha-agent_${os}_arm.zip" ;;
  i386|i686) pkg="nezha-agent_${os}_386.zip" ;;
  *) echo "不支持架构: $arch"; exit 1 ;;
esac

tmp="/tmp/${pkg}"
mkdir -p "$INSTALL_DIR"

echo "[1/5] 下载 $pkg"
curl -fL --retry 3 --connect-timeout 10 "${BASE_URL}/${pkg}" -o "$tmp"

echo "[2/5] 解压"
if ! command -v unzip >/dev/null 2>&1; then
  apt-get update && apt-get install -y unzip
fi
unzip -qo "$tmp" -d "$INSTALL_DIR"
chmod +x "$INSTALL_DIR/nezha-agent"
rm -f "$tmp"

echo "[3/5] 安装/重装服务"
CONFIG_PATH="$INSTALL_DIR/config.yml"
if [[ -f "$CONFIG_PATH" ]]; then
  rand=$(tr -dc a-z0-9 </dev/urandom | head -c 5)
  CONFIG_PATH="$INSTALL_DIR/config-${rand}.yml"
fi

"$INSTALL_DIR/nezha-agent" service -c "$CONFIG_PATH" uninstall >/dev/null 2>&1 || true

env \
  NZ_UUID="$NZ_UUID" \
  NZ_SERVER="$NZ_SERVER" \
  NZ_CLIENT_SECRET="$NZ_CLIENT_SECRET" \
  NZ_TLS="$NZ_TLS" \
  NZ_DISABLE_AUTO_UPDATE="$NZ_DISABLE_AUTO_UPDATE" \
  NZ_DISABLE_FORCE_UPDATE="$NZ_DISABLE_FORCE_UPDATE" \
  NZ_DISABLE_COMMAND_EXECUTE="$NZ_DISABLE_COMMAND_EXECUTE" \
  NZ_SKIP_CONNECTION_COUNT="$NZ_SKIP_CONNECTION_COUNT" \
  "$INSTALL_DIR/nezha-agent" service -c "$CONFIG_PATH" install

echo "[4/5] 启动服务"
systemctl daemon-reload
systemctl enable --now nezha-agent

echo "[5/5] 完成"
systemctl status nezha-agent --no-pager -l || true
