#!/usr/bin/env bash
# ============================================================
# Komari Agent 一键安装脚本
# 自动检测架构 → 下载 → 安装 → 连接 Server
# 用法: bash <(curl -s http://8.134.130.124/komari/install.sh) <SERVER_URL>
# 示例: bash <(curl -s http://8.134.130.124/komari/install.sh) http://8.134.130.124:25774
# ============================================================
set -euo pipefail

MIRROR="http://8.134.130.124/komari"
INSTALL_DIR="/usr/local/bin"
MAX_RETRIES=3

RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; CYAN='\033[0;36m'; NC='\033[0m'
info()  { echo -e "${CYAN}[INFO]${NC} $*"; }
ok()    { echo -e "${GREEN}[OK]${NC} $*"; }
warn()  { echo -e "${YELLOW}[WARN]${NC} $*"; }
err()   { echo -e "${RED}[ERR]${NC} $*" >&2; exit 1; }

echo ""
echo "  ╔══════════════════════════════════════╗"
echo "  ║   Komari Agent 一键安装               ║"
echo "  ╚══════════════════════════════════════╝"
echo ""

# ── 参数检查 ──
SERVER_URL="${1:-}"
[ -n "$SERVER_URL" ] || err "用法: bash install.sh <SERVER_URL>\n示例: bash install.sh http://8.134.130.124:25774"
info "Server 地址: $SERVER_URL"

# ── root 检查 ──
[ "$(id -u)" -eq 0 ] || err "需要 root 权限，请用 sudo 运行"

# ── 检测架构 ──
ARCH=$(uname -m)
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
case "$ARCH" in
    x86_64|amd64)  BINARY="komari-agent-linux-amd64" ;;
    aarch64|arm64) BINARY="komari-agent-linux-arm64" ;;
    i386|i686)     BINARY="komari-agent-linux-386"   ;;
    armv7l|arm)    BINARY="komari-agent-linux-arm"   ;;
    *) err "不支持的架构: $ARCH" ;;
esac
info "系统架构: $ARCH → $BINARY"

# ── 获取校验值 ──
info "获取 SHA256 校验值..."
CHECKSUMS=$(curl -sS "$MIRROR/checksums.txt" 2>/dev/null) || err "无法获取 checksums.txt"
EXPECTED=$(echo "$CHECKSUMS" | grep " $BINARY\$" | awk '{print $1}')
[ -n "$EXPECTED" ] || err "checksums.txt 中未找到 $BINARY"

# ── 下载 ──
attempt=1
while [ $attempt -le $MAX_RETRIES ]; do
    info "下载 $BINARY (第 $attempt/$MAX_RETRIES 次)..."
    tmpfile=$(mktemp)
    if curl -#fSL "$MIRROR/$BINARY" -o "$tmpfile" 2>/dev/null; then
        ACTUAL=$(sha256sum "$tmpfile" | awk '{print $1}')
        if [ "$EXPECTED" = "$ACTUAL" ]; then
            ok "下载成功，SHA256 校验通过"
            mkdir -p "$INSTALL_DIR"
            mv "$tmpfile" "$INSTALL_DIR/komari-agent"
            chmod +x "$INSTALL_DIR/komari-agent"
            break
        else
            warn "SHA256 不匹配"
            rm -f "$tmpfile"
        fi
    else
        warn "下载失败"
        rm -f "$tmpfile"
    fi
    attempt=$((attempt + 1))
    [ $attempt -le $MAX_RETRIES ] && sleep 3
done
[ -f "$INSTALL_DIR/komari-agent" ] || err "下载失败，已重试 $MAX_RETRIES 次"

# ── 创建 systemd 服务 ──
info "配置 systemd 服务..."
cat > /etc/systemd/system/komari-agent.service << EOF
[Unit]
Description=Komari Agent
After=network.target

[Service]
Type=simple
ExecStart=$INSTALL_DIR/komari-agent --server $SERVER_URL
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable komari-agent.service
systemctl restart komari-agent.service

# ── 验证 ──
sleep 2
if systemctl is-active --quiet komari-agent; then
    ok "Komari Agent 已启动，连接到 $SERVER_URL"
    echo ""
    info "查看日志: journalctl -u komari-agent -f"
    echo ""
else
    err "Agent 未正常启动，查看日志: journalctl -u komari-agent -n 20"
fi
