#!/bin/bash
# JDK 一键安装 (Debian/Ubuntu) - 交互式
# 用法:
#   bash install-jdk.sh            # 交互菜单选择
#   bash install-jdk.sh 21         # 直接指定版本
#   bash install-jdk.sh 21 arm64   # 指定版本+架构
set -e

MIRROR="${MIRROR:-http://cesl1493939.bohrium.tech:50004/JDK}"
ARCH=""
JDK_VER=""

# ---- 架构选择 ----
pick_arch() {
  local detected
  case "$(uname -m)" in
    x86_64)  detected="x64" ;;
    aarch64) detected="aarch64" ;;
    *) detected="" ;;
  esac
  echo ""
  echo "选择 CPU 架构:"
  echo "  1) x86_64  (Intel/AMD 64位)"
  echo "  2) aarch64 (ARM 64位)"
  if [ -n "$detected" ]; then
    echo "  (检测到当前系统: $detected，直接回车默认)"
  fi
  read -rp "输入 [1/2]${detected:+ (默认 $detected)}: " ch
  case "${ch:-$detected}" in
    1|x86_64|x64) ARCH="x64" ;;
    2|aarch64|arm64) ARCH="aarch64" ;;
    *) echo "无效选择"; pick_arch ;;
  esac
}

# ---- 版本选择 ----
pick_ver() {
  echo ""
  echo "选择要安装的 JDK 版本:"
  echo "  1) JDK 8    - Alibaba Dragonwell (适合 MC 1.16.5 及更早)"
  echo "  2) JDK 17   - Amazon Corretto  (适合 MC 1.17 ~ 1.20.4)"
  echo "  3) JDK 21   - Amazon Corretto  (适合 MC 1.20.5+ / 1.21 / 26.x) ← 推荐"
  echo "  4) JDK 25   - Amazon Corretto  (最新 LTS)"
  read -rp "输入 [1-4]: " ch
  case "$ch" in
    1) JDK_VER=8 ;;
    2) JDK_VER=17 ;;
    3) JDK_VER=21 ;;
    4) JDK_VER=25 ;;
    *) echo "无效选择"; pick_ver ;;
  esac
}

# ---- 参数解析 ----
if [ -n "$1" ]; then
  case "$1" in
    8|17|21|25) JDK_VER="$1" ;;
    *) echo "支持的 JDK: 8/17/21/25"; exit 1 ;;
  esac
  if [ -n "$2" ]; then
    case "$2" in
      x64|x86_64) ARCH="x64" ;;
      arm64|aarch64) ARCH="aarch64" ;;
      *) echo "架构参数: x64 或 arm64"; exit 1 ;;
    esac
  fi
fi

echo "======================================"
echo "   JDK 安装器 (镜像站: $MIRROR)"
echo "======================================"
[ -z "$JDK_VER" ] && pick_ver
[ -z "$ARCH" ] && pick_arch

# 包名映射
case "$JDK_VER" in
  8)  PKG="Alibaba_Dragonwell_Standard_8.29.28_${ARCH}_linux.tar.gz" ;;
  17|21|25) PKG="amazon-corretto-${JDK_VER}-${ARCH}-linux-jdk.tar.gz" ;;
esac

URL="${MIRROR}/${PKG}"
echo ""
echo ">>> 即将安装: JDK $JDK_VER ($ARCH)"
echo "    下载: $URL"
read -rp "确认安装? [y/N]: " ok
[ "${ok,,}" != "y" ] && echo "已取消" && exit 0

echo ">>> 下载中..."
cd /tmp
if [ ! -f "$PKG" ]; then
  curl -fsSL --connect-timeout 15 -o "$PKG" "$URL" || { echo "下载失败"; exit 1; }
fi
echo ">>> 下载完成: $(du -h "$PKG" | cut -f1)"

# 解压
rm -rf /usr/local/jdk-tmp
mkdir -p /usr/local/jdk-tmp
echo ">>> 解压中..."
tar xzf "$PKG" -C /usr/local/jdk-tmp
JDK_DIR=$(find /usr/local/jdk-tmp -maxdepth 1 -type d \( -name "*jdk*" -o -name "*Jdk*" \) | head -1)
[ -z "$JDK_DIR" ] && JDK_DIR=$(ls -d /usr/local/jdk-tmp/*/ | head -1)

FINAL="/usr/local/jdk-${JDK_VER}"
rm -rf "$FINAL"
mv "$JDK_DIR" "$FINAL"

# update-alternatives
for bin in java javac jar keytool; do
  if [ -f "$FINAL/bin/$bin" ]; then
    update-alternatives --install "/usr/bin/$bin" "$bin" "$FINAL/bin/$bin" 2000 2>/dev/null || \
      ln -sf "$FINAL/bin/$bin" "/usr/bin/$bin"
  fi
done

# JAVA_HOME
cat > /etc/profile.d/jdk.sh << EOF
export JAVA_HOME=$FINAL
export PATH=\$JAVA_HOME/bin:\$PATH
EOF
chmod +x /etc/profile.d/jdk.sh

echo ""
echo ">>> 验证:"
"$FINAL/bin/java" -version 2>&1 | head -3
echo ""
echo "======================================"
echo "✅ JDK $JDK_VER 安装完成: $FINAL"
echo "   JAVA_HOME 已写入 /etc/profile.d/jdk.sh (新终端生效)"
echo "   切换版本: bash <(curl -fsSL $MIRROR/install-jdk.sh) 重新运行选其他版本"
echo "======================================"
