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

REQUIRED_NODE_MAJOR=20

maybe_sudo() {
  if [[ $EUID -eq 0 ]]; then "$@"; elif command -v sudo >/dev/null 2>&1; then sudo "$@"; else echo "need sudo"; exit 1; fi
}

node_ok() {
  if ! command -v node >/dev/null 2>&1 || ! command -v npm >/dev/null 2>&1; then return 1; fi
  local v="$(node --version 2>/dev/null || true)"
  v="${v#v}"
  local major="${v%%.*}"
  [[ "$major" =~ ^[0-9]+$ ]] && (( major >= REQUIRED_NODE_MAJOR ))
}

install_node() {
  if command -v apt >/dev/null 2>&1 || command -v apt-get >/dev/null 2>&1; then
    curl -fsSL https://deb.nodesource.com/setup_20.x | maybe_sudo bash -
    if command -v apt >/dev/null 2>&1; then maybe_sudo apt install -y nodejs; else maybe_sudo apt-get install -y nodejs; fi
    return
  fi
  if command -v dnf >/dev/null 2>&1; then curl -fsSL https://rpm.nodesource.com/setup_20.x | maybe_sudo bash -; maybe_sudo dnf install -y nodejs; return; fi
  if command -v yum >/dev/null 2>&1; then curl -fsSL https://rpm.nodesource.com/setup_20.x | maybe_sudo bash -; maybe_sudo yum install -y nodejs; return; fi
  if command -v pacman >/dev/null 2>&1; then maybe_sudo pacman -Sy --needed --noconfirm nodejs npm; return; fi
  if command -v brew >/dev/null 2>&1; then brew update; brew install node@20; brew link --overwrite --force node@20; return; fi
  echo "请先手动安装 Node.js >= 20"; exit 1
}

if ! node_ok; then install_node; fi
npm install -g @openai/codex || {
  prefix="${HOME:-$PWD}/.npm-global"; mkdir -p "$prefix"; npm config set prefix "$prefix"; npm install -g @openai/codex; export PATH="$prefix/bin:$PATH";
}
success_msg=$'codex\u5b89\u88c5\u6210\u529f\uff0c\u8fd8\u9700\u8981\u914d\u7f6eapi key\u624d\u53ef\u4f7f\u7528\uff0c\u56fd\u5185\u7528\u6237\u83b7\u53d6\u4e2d\u8f6c\u7248\u5730\u5740\uff1ahttps://codex.dakeai.cc/register?promo=DKAI \u6ce8\u518c\u90015\u5200\u4f59\u989d'
printf '%s\n' "$success_msg"
