#!/bin/bash
# ------------------------------------------------------------------
#  qimenidc-client 一键安装 / 更新 / 卸载脚本（多架构自动选择）
#  用法：./qimenidc-client.sh [install|update|uninstall]
# ------------------------------------------------------------------
set -e

# 1. 根据 CPU 架构决定镜像
case "$(uname -m)" in
  x86_64|amd64)
    IMAGE="docker.cnb.cool/acmecloud/qimenidc-client:latest-linux-amd64"
    ;;
  aarch64|arm64)
    IMAGE="docker.cnb.cool/acmecloud/qimenidc-client:latest-linux-arm64"
    ;;
  *)
    echo "不支持当前架构：$(uname -m)" >&2
    exit 1
    ;;
esac

CONTAINER="qimenidc-client"
HOST_PORT="${HOST_PORT:-3000}"
API_BASEURL="${API_BASEURL:-}"
NEXT_PUBLIC_Auth_Key="${NEXT_PUBLIC_Auth_Key:-}"

# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m'

log()  { echo -e "${GREEN}[INFO]${NC} $1"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
error(){ echo -e "${RED}[ERROR]${NC} $1"; }

container_exists() {
  docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER}$"
}

install() {
  if container_exists; then
    warn "容器 ${CONTAINER} 已存在，如需更新请使用 update。"
    exit 1
  fi

  [[ -z "$API_BASEURL" ]] && read -rp "请输入 API_BASEURL（例如 http://example.com）： " API_BASEURL
  [[ -z "$NEXT_PUBLIC_Auth_Key" ]] && read -rp "请输入 NEXT_PUBLIC_Auth_Key（可选，直接回车跳过）： " NEXT_PUBLIC_Auth_Key
  [[ "$HOST_PORT" == "3000" ]] && read -rp "请输入宿主机端口（默认 3000，直接回车使用默认值）： " custom_port
  [[ -n "$custom_port" ]] && HOST_PORT="$custom_port"

  log "拉取镜像 ${IMAGE} ..."
  docker pull "$IMAGE"

  log "启动容器 ..."
  docker run -d \
    --name "$CONTAINER" \
    -p "${HOST_PORT}:3000" \
    -e "API_BASEURL=$API_BASEURL" \
    -e "NEXT_PUBLIC_Auth_Key=$NEXT_PUBLIC_Auth_Key" \
    "$IMAGE"

  log "安装完成！访问 http://localhost:${HOST_PORT}"
}

update() {
  if ! container_exists; then
    error "容器 ${CONTAINER} 不存在，请先安装。"
    exit 1
  fi

  log "拉取最新镜像 ..."
  docker pull "$IMAGE"

  # 获取旧容器的端口映射和环境变量（在删除之前）
  OLD_PORT=$(docker inspect "$CONTAINER" --format='{{range $p, $conf := .NetworkSettings.Ports}}{{if eq $p "3000/tcp"}}{{(index $conf 0).HostPort}}{{end}}{{end}}')
  HOST_PORT="${OLD_PORT:-3000}"
  
  API_BASEURL=$(docker inspect "$CONTAINER" --format='{{range .Config.Env}}{{println .}}{{end}}' | grep '^API_BASEURL=' | cut -d= -f2-)
  [[ -z "$API_BASEURL" ]] && read -rp "请输入 API_BASEURL（例如 http://example.com）： " API_BASEURL
  
  NEXT_PUBLIC_Auth_Key=$(docker inspect "$CONTAINER" --format='{{range .Config.Env}}{{println .}}{{end}}' | grep '^NEXT_PUBLIC_Auth_Key=' | cut -d= -f2-)
  [[ -z "$NEXT_PUBLIC_Auth_Key" ]] && read -rp "请输入 NEXT_PUBLIC_Auth_Key（可选，直接回车跳过）： " NEXT_PUBLIC_Auth_Key
  
  read -rp "请输入宿主机端口（当前 ${HOST_PORT}，直接回车保持不变）： " custom_port
  [[ -n "$custom_port" ]] && HOST_PORT="$custom_port"

  log "停止并移除旧容器 ..."
  docker stop "$CONTAINER" && docker rm "$CONTAINER"

  log "启动新容器 ..."
  docker run -d \
    --name "$CONTAINER" \
    -p "${HOST_PORT}:3000" \
    -e "API_BASEURL=$API_BASEURL" \
    -e "NEXT_PUBLIC_Auth_Key=$NEXT_PUBLIC_Auth_Key" \
    "$IMAGE"

  log "更新完成！访问 http://localhost:${HOST_PORT}"
}

uninstall() {
  if ! container_exists; then
    warn "容器 ${CONTAINER} 不存在，无需卸载。"
    exit 0
  fi

  read -rp "确认卸载容器 ${CONTAINER}？(y/n): " confirm
  [[ "$confirm" != "y" ]] && { log "取消卸载"; exit 0; }

  log "停止并移除容器 ..."
  docker stop "$CONTAINER" || true
  docker rm   "$CONTAINER" || true

  read -rp "是否同时删除镜像 ${IMAGE}？(y/n): " del_img
  [[ "$del_img" == "y" ]] && { docker rmi "$IMAGE" || true; log "镜像已删除。"; }

  log "卸载完成！"
}

case "${1:-}" in
  install|i)     install   ;;
  update|u)      update    ;;
  uninstall|r)   uninstall ;;
  *) cat <<EOF
用法: $0 {install|update|uninstall}
快捷方式：
  install 或 i   安装
  update  或 u   更新
  uninstall 或 r 卸载
EOF
  ;;
esac