#!/usr/bin/env bash
# GoCDN 主控安装脚本（CentOS 7+/Ubuntu 18+，需 root）
# 用法:
#   ./install-master.sh -f ./gocdn-master                    # 使用本地二进制
#   ./install-master.sh -u https://example.com/gocdn-master  # 从 URL 下载
#   ./install-master.sh -f ./gocdn-master -listen :8080
set -e

BIN_URL=""
BIN_FILE=""
LISTEN=":8080"
PREFIX="/usr/local/gocdn/master"

while getopts "u:f:l:" opt; do
  case $opt in
    u) BIN_URL="$OPTARG" ;;
    f) BIN_FILE="$OPTARG" ;;
    l) LISTEN="$OPTARG" ;;
    *) echo "用法: $0 [-u 二进制URL | -f 本地二进制] [-l 监听地址]"; exit 1 ;;
  esac
done

[ "$(id -u)" -eq 0 ] || { echo "请使用 root 运行"; exit 1; }

mkdir -p "$PREFIX"
BIN="$PREFIX/gocdn-master"

if [ -n "$BIN_FILE" ]; then
  cp -f "$BIN_FILE" "$BIN"
elif [ -n "$BIN_URL" ]; then
  echo "下载主控程序: $BIN_URL"
  curl -fL --retry 3 -o "$BIN" "$BIN_URL" || wget -qO "$BIN" "$BIN_URL"
else
  if [ -f "./gocdn-master" ]; then
    cp -f ./gocdn-master "$BIN"
  else
    echo "错误: 未指定 -f/-u，且当前目录无 gocdn-master 文件"; exit 1
  fi
fi
chmod +x "$BIN"

cat > /etc/systemd/system/gocdn-master.service <<EOF
[Unit]
Description=GoCDN Master Control
After=network.target

[Service]
Type=simple
ExecStart=$BIN -listen $LISTEN -db $PREFIX/gocdn.db
Restart=always
RestartSec=5
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable --now gocdn-master
sleep 1
systemctl --no-pager status gocdn-master | head -8 || true

echo "======================================================"
echo "GoCDN 主控安装完成！"
echo "  访问:   http://服务器IP${LISTEN/:/:}"
echo "  首次启动的管理员密码在服务日志中，执行以下命令查看："
echo "    journalctl -u gocdn-master | grep 密码"
echo "  服务管理: systemctl {start|stop|restart} gocdn-master"
echo "======================================================"
