#!/usr/bin/env bash
set -euo pipefail

SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)"
cd "$SCRIPT_DIR"

printf 'bot-forge 部署服务器地址配置\n'
printf '\n'
printf '地址示例：\n'
printf "  '%s'\n" 'https://你的服务器/bot-forge'
printf '\n'
printf '该地址对应的服务器文件夹应包含：\n'
printf '  bootstrap.sh\n'
printf '  bootstrap.ps1\n'
printf '  install.sh\n'
printf '  install.ps1\n'
printf '  bot-forge.toml\n'
printf '  SHA256SUMS\n'
printf '  SHA256SUMS.sha256\n'
printf '  linux-x86_64-bot-forge\n'
printf '  windows-x86_64-bot-forge.exe\n'
printf '\n'
printf '按需提供的 ARM64 文件：\n'
printf '  linux-aarch64-bot-forge\n'
printf '  windows-aarch64-bot-forge.exe\n'
printf '\n'
printf '请输入完整服务器目录地址（不要填写具体文件名）：\n> '
IFS= read -r server_url

server_url="${server_url%/}"
if [[ -z "$server_url" ]]; then
    printf '错误：服务器地址不能为空。\n' >&2
    exit 1
fi
case "$server_url" in
http://* | https://*) ;;
*)
    printf '错误：服务器地址必须以 http:// 或 https:// 开头。\n' >&2
    exit 1
    ;;
esac
if [[ "$server_url" == *"'"* || "$server_url" == *$'\n'* || "$server_url" == *$'\r'* ]]; then
    printf '错误：服务器地址包含不支持的字符。\n' >&2
    exit 1
fi

for required in bootstrap.sh bootstrap.ps1; do
    if [[ ! -f "$required" ]]; then
        printf '错误：当前目录缺少 %s。\n' "$required" >&2
        exit 1
    fi
done

escape_sed_replacement() {
    printf '%s' "$1" | sed 's/[\\&|]/\\&/g'
}

escaped_url="$(escape_sed_replacement "$server_url")"
linux_stage="$(mktemp "$SCRIPT_DIR/.bootstrap.sh.url.XXXXXX")"
windows_stage="$(mktemp "$SCRIPT_DIR/.bootstrap.ps1.url.XXXXXX")"
cleanup() {
    rm -f "$linux_stage" "$windows_stage"
}
trap cleanup EXIT

printf '\n正在更新 Linux bootstrap...\n'
sed "s|^BASE_URL=.*$|BASE_URL=\"\${BOT_FORGE_BASE_URL:-$escaped_url}\"|" \
    bootstrap.sh > "$linux_stage"
if ! grep -Fq "BASE_URL=\"\${BOT_FORGE_BASE_URL:-$server_url}\"" "$linux_stage"; then
    printf '错误：无法识别 bootstrap.sh 中的服务器地址配置。\n' >&2
    exit 1
fi
chmod --reference=bootstrap.sh "$linux_stage"
mv -f "$linux_stage" bootstrap.sh
printf '已更新：bootstrap.sh\n'

printf '正在更新 Windows bootstrap...\n'
sed -E "s|^([[:space:]]*)'https?://[^']+'[[:space:]]*$|\1'$escaped_url'|" \
    bootstrap.ps1 > "$windows_stage"
if ! grep -Fq "    '$server_url'" "$windows_stage"; then
    printf '错误：无法识别 bootstrap.ps1 中的服务器地址配置。\n' >&2
    exit 1
fi
chmod --reference=bootstrap.ps1 "$windows_stage"
mv -f "$windows_stage" bootstrap.ps1
printf '已更新：bootstrap.ps1\n'

printf '\n服务器地址配置完成：\n'
printf '  %s\n' "$server_url"
printf '\n用户安装命令示例：\n'
printf 'Linux：\n'
printf '  curl -fsSL %s/bootstrap.sh | bash\n' "$server_url"
printf 'Windows PowerShell：\n'
printf "  powershell -NoProfile -ExecutionPolicy Bypass -Command \"Invoke-RestMethod '%s/bootstrap.ps1' | Invoke-Expression\"\n" "$server_url"
printf '\n提示：修改服务器地址不会改变发布文件 SHA-256，无需因此重新生成 SHA256SUMS。\n'
