#!/bin/sh

# ========== 配置常量 ==========
SERVICE_NAME="CGS"
BIN_FILENAME="CGS"
ZIP_URL="http://nas.homeli.space:41500/CGS/CGS-100_Pro/CGS_Linux_amd_1.0.91.zip"
TMP_ZIP="/tmp/CGS_Linux.zip"
WORK_DIR="/opt/${SERVICE_NAME}"
SERVICE_PATH="/etc/systemd/system/${SERVICE_NAME}.service"
BIN_PATH="${WORK_DIR}/${BIN_FILENAME}"
# ==============================

# 自动获取登录用户，获取失败兜底 ubuntu
if [ -n "$SUDO_UID" ]; then
    RUN_USER=$(id -un "$SUDO_UID" 2>/dev/null || echo "ubuntu")
else
    RUN_USER="$USER"
fi

echo "=== Install ${SERVICE_NAME} Service ==="
echo "程序运行用户：${RUN_USER}"

# 检查unzip，不存在则自动安装
if ! command -v unzip >/dev/null 2>&1; then
    echo "未检测到 unzip，开始自动安装..."
    apt update -y
    apt install unzip -y
    if [ $? -ne 0 ]; then
        echo "ERROR: unzip 安装失败，请手动执行 apt install unzip"
        exit 1
    fi
    echo "unzip 安装完成"
fi

# 清理旧目录
rm -rf "${WORK_DIR}"
mkdir -p "${WORK_DIR}"

# 下载zip压缩包
echo "开始下载安装包：${ZIP_URL}"
wget -O "${TMP_ZIP}" "${ZIP_URL}"
if [ $? -ne 0 ]; then
    echo "ERROR: 压缩包下载失败，请检查NAS地址与网络"
    exit 1
fi

# 解压到工作目录（保留压缩包内原有目录结构）
echo "解压文件至 ${WORK_DIR}"
unzip -o -d "${WORK_DIR}" "${TMP_ZIP}"
if [ $? -ne 0 ]; then
    echo "ERROR: 解压失败，请确认服务器存在CGS_Linux.zip"
    rm -f "${TMP_ZIP}"
    exit 1
fi

# 删除临时zip文件
rm -f "${TMP_ZIP}"

# 赋予主程序执行权限
if [ -f "${BIN_PATH}" ]; then
    chmod +x "${BIN_PATH}"
else
    echo "ERROR: 未找到主程序 ${BIN_FILENAME}，压缩包内容异常"
    exit 1
fi

# 关键修复：递归修改目录所有者，程序运行用户拥有读写权限
echo "分配目录读写权限给运行用户 ${RUN_USER}"
chown -R "${RUN_USER}:${RUN_USER}" "${WORK_DIR}"

# 生成 systemd 服务文件
tee "${SERVICE_PATH}" >/dev/null <<EOF
[Unit]
Description=${SERVICE_NAME} Service
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=${RUN_USER}
WorkingDirectory=${WORK_DIR}
ExecStart=${BIN_PATH}
Restart=on-failure
RestartSec=5
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
EOF

# 重载systemd、开机自启并启动服务
systemctl daemon-reload
systemctl enable --now "${SERVICE_NAME}"

echo "========================================"
echo "安装完成！"
echo "程序目录：${WORK_DIR}"
echo "主程序：${BIN_PATH}"
echo "查看服务状态：systemctl status ${SERVICE_NAME}"
echo "实时日志：journalctl -u ${SERVICE_NAME} -f"
echo "运行用户：${RUN_USER}"
echo "========================================"
