#!/usr/bin/env bash
#
# iiii.dev 引导脚本: 下载对应平台的 Rust TUI 安装器并执行
# 下载失败时回退到纯 bash 安装器(/fallback)
#
# 用法: curl -fsSL https://get.iiii.dev | bash
#
set -euo pipefail

BASE_URL="${IIII_BASE_URL:-https://get.iiii.dev}"
BIN="iiii-installer"

command -v curl >/dev/null 2>&1 || { echo "错误: 需要 curl" >&2; exit 1; }
[ -e /dev/tty ] || { echo "错误: 没有可用的终端" >&2; exit 1; }

case "$(uname -s)-$(uname -m)" in
  Darwin-arm64)              TARGET="aarch64-apple-darwin" ;;
  Darwin-x86_64)             TARGET="x86_64-apple-darwin" ;;
  Linux-x86_64)              TARGET="x86_64-unknown-linux-musl" ;;
  Linux-aarch64|Linux-arm64) TARGET="aarch64-unknown-linux-musl" ;;
  *)                         TARGET="" ;;
esac

TMPD=$(mktemp -d)
cleanup() { rm -rf "$TMPD"; }
trap cleanup EXIT

run_fallback() {
  echo "==> 使用 shell 安装器"
  curl -fsSL "$BASE_URL/fallback" -o "$TMPD/fallback.sh" || { echo "错误: 无法获取安装器" >&2; exit 1; }
  bash "$TMPD/fallback.sh"
  exit $?
}

[ -n "$TARGET" ] || run_fallback

# 统一从 Worker 的 /bin/ 取(私有仓库由 Worker 用 GH_TOKEN 代理,公开仓库则 302 到 GitHub);
# 可用 IIII_BIN_URL 覆盖(例如内网镜像)
URL="${IIII_BIN_URL:-$BASE_URL/bin/$BIN-$TARGET.tar.gz}"

echo "==> 下载安装器 ($TARGET) ..."
if ! curl -fsSL --connect-timeout 10 "$URL" -o "$TMPD/$BIN.tgz" 2>/dev/null; then
  echo "==> 二进制下载失败,回退到 shell 安装器"
  run_fallback
fi
tar -xzf "$TMPD/$BIN.tgz" -C "$TMPD" || run_fallback
chmod +x "$TMPD/$BIN"

# TUI 需要真实终端: stdin 接 /dev/tty(本脚本经管道执行时 stdin 是脚本本身)
IIII_BASE_URL="$BASE_URL" "$TMPD/$BIN" < /dev/tty
