#!/usr/bin/env bash
#
# install_sa2.sh - 引导脚本，用于下载并执行 SA 程序最新版本的安装脚本
# 版本: 1.1.0
# 作者: 系统管理团队
# 描述: 本脚本从指定的内网或外网地址下载 install_sa2_exec.sh，然后执行它。
#       支持 --help/-h、--version/-v 以及 --force-install/-f 等参数，
#       除帮助和版本外的所有参数均会原样传递给实际的安装脚本。

set -e  # 遇到错误立即退出，但部分命令需手动检查，所以可能会临时禁用

VERSION="1.1.0"
SCRIPT_NAME="install_sa2_exec.sh"
URL_PRIMARY="http://192.168.3.9/sa2/app/scripts/${SCRIPT_NAME}"
URL_SECONDARY="http://sc.casstk.com/sa2/app/scripts/${SCRIPT_NAME}"

# 颜色定义（可选，用于友好提示）
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color

# 帮助信息
usage() {
    cat <<EOF
用法: $0 [选项] [安装脚本参数...]

选项:
    -h, --help           显示此帮助信息
    -v, --version        显示脚本版本号
    -f, --force-install  强制安装（该参数会原样传递给安装脚本）

描述:
    此脚本是 SA 程序安装的引导程序。它会从以下两个地址尝试下载
    ${SCRIPT_NAME}（优先内网），然后执行该脚本完成实际安装。
    所有除 -h/--help 和 -v/--version 外的参数都会原封不动地传递给
    安装脚本（例如 --force-install 或 -f）。

    内网地址: ${URL_PRIMARY}
    外网地址: ${URL_SECONDARY}

    如果本地已存在 ${SCRIPT_NAME}，脚本会先删除它。
    下载工具优先使用 curl，如果不存在则使用 wget。

示例:
    $0                               # 正常下载并执行安装
    $0 --help                        # 显示帮助
    $0 --version                     # 显示版本号
    $0 --force-install                # 下载并执行安装，并传递 --force-install 参数
    $0 -f                             # 同上，使用短参数
    $0 --force-install --some-other-arg # 传递多个自定义参数

EOF
    exit 0
}

# 版本信息
version() {
    echo "$0 版本 ${VERSION}"
    exit 0
}

# 初始化额外参数数组（将传递给安装脚本）
EXTRA_ARGS=()

# 解析命令行参数
# 将除 -h/--help 和 -v/--version 外的所有参数收集到 EXTRA_ARGS
while [[ $# -gt 0 ]]; do
    case "$1" in
        -h|--help)
            usage
            ;;
        -v|--version)
            version
            ;;
        *)
            # 其他所有参数（包括 -f/--force-install 等）都保留并传递给安装脚本
            EXTRA_ARGS+=("$1")
            shift
            ;;
    esac
done

# 检查并选择下载工具
DOWNLOAD_CMD=""
if command -v curl >/dev/null 2>&1; then
    DOWNLOAD_CMD="curl -fsSL -o"
elif command -v wget >/dev/null 2>&1; then
    DOWNLOAD_CMD="wget -qO"
else
    echo -e "${RED}错误: 未找到 curl 或 wget，请先安装其中之一。${NC}" >&2
    exit 1
fi

# 如果本地已存在目标脚本，先删除
if [ -f "${SCRIPT_NAME}" ]; then
    echo -e "${YELLOW}发现本地已存在 ${SCRIPT_NAME}，正在删除...${NC}"
    rm -f "${SCRIPT_NAME}"
fi

# 下载函数，参数1: URL
download() {
    local url="$1"
    echo -e "${GREEN}尝试从 ${url} 下载 ${SCRIPT_NAME}...${NC}"
    if $DOWNLOAD_CMD "${SCRIPT_NAME}" "$url"; then
        echo -e "${GREEN}下载成功。${NC}"
        return 0
    else
        echo -e "${RED}从 ${url} 下载失败。${NC}" >&2
        return 1
    fi
}

# 尝试从主 URL 下载，失败则尝试备用 URL
if ! download "$URL_PRIMARY"; then
    echo -e "${YELLOW}尝试从备用地址下载...${NC}"
    if ! download "$URL_SECONDARY"; then
        echo -e "${RED}错误: 无法从任何地址下载 ${SCRIPT_NAME}，安装中止。${NC}" >&2
        exit 1
    fi
fi

# 检查下载的文件是否存在且非空
if [ ! -s "${SCRIPT_NAME}" ]; then
    echo -e "${RED}错误: 下载的 ${SCRIPT_NAME} 文件为空或不存在。${NC}" >&2
    exit 1
fi

# 赋予执行权限
chmod +x "${SCRIPT_NAME}"

# 执行安装脚本，并传递所有额外参数
echo -e "${GREEN}开始执行安装脚本 ${SCRIPT_NAME}，参数: ${EXTRA_ARGS[*]}${NC}"
./"${SCRIPT_NAME}" -y "${EXTRA_ARGS[@]}"

# 获取子脚本的退出码并退出
exit $?
