#!/usr/bin/env bash
# gen-poc-config.sh — 渲染 REALITY 客户端 PoC 配置（tsk_SLCsjNgtmng3）
#
# 用法: ./gen-poc-config.sh [--out <output.json>]
#
# 从环境变量读取参数（须全部提供，无 --干跑 模式）：
#   SERVER_HOST          EC2 IP（如 18.136.60.128）
#   SERVER_PORT          Xray VLESS 监听端口（如 11443）
#   REALITY_UUID         客户端 UUID
#   REALITY_PUBLIC_KEY   REALITY 公钥
#   REALITY_SHORT_ID     REALITY shortId
#   REALITY_SNI          TLS SNI（如 www.apple.com）
#
# 可选：
#   CLASH_API_PORT   Clash API 端口（默认随机 49152-65535）
#   CLASH_API_SECRET Clash API secret（默认随机 32 字节 hex）
#
# 产物默认写到 /tmp/pangolin-poc-config.json（权限 0600）。
#
# 注意：REALITY 私钥等参数绝不入库，仅在运行时从 EC2 secrets/ 或 Bitwarden 取。

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
TMPL="${SCRIPT_DIR}/reality_client.config.json.tmpl"
OUT="${1:---out}"
if [[ "${OUT}" == "--out" ]]; then
    OUT="${2:-/tmp/pangolin-poc-config.json}"
    shift 2 2>/dev/null || true
fi

# ── 参数检查 ──────────────────────────────────────────────────────

_require() {
    local name="$1"
    if [[ -z "${!name:-}" ]]; then
        printf '✗ 环境变量 %s 未设置\n' "$name" >&2
        printf '  示例: export %s=<value>\n' "$name" >&2
        exit 1
    fi
}

_require SERVER_HOST
_require SERVER_PORT
_require REALITY_UUID
_require REALITY_PUBLIC_KEY
_require REALITY_SHORT_ID

REALITY_SNI="${REALITY_SNI:-www.apple.com}"

# 生成随机 Clash API 端口和 secret（若未指定）
if [[ -z "${CLASH_API_PORT:-}" ]]; then
    CLASH_API_PORT="$(python3 -c 'import random; print(random.randint(49152,65535))')"
fi
if [[ -z "${CLASH_API_SECRET:-}" ]]; then
    CLASH_API_SECRET="$(python3 -c 'import secrets; print(secrets.token_hex(32))')"
fi

# ── 渲染模板 ──────────────────────────────────────────────────────

printf '==> 渲染配置 → %s\n' "$OUT"

sed \
    -e "s|__SERVER_HOST__|${SERVER_HOST}|g" \
    -e "s|__SERVER_PORT__|${SERVER_PORT}|g" \
    -e "s|__UUID__|${REALITY_UUID}|g" \
    -e "s|__REALITY_PUBLIC_KEY__|${REALITY_PUBLIC_KEY}|g" \
    -e "s|__REALITY_SHORT_ID__|${REALITY_SHORT_ID}|g" \
    -e "s|__REALITY_SNI__|${REALITY_SNI}|g" \
    -e "s|__CLASH_API_PORT__|${CLASH_API_PORT}|g" \
    -e "s|__CLASH_API_SECRET__|${CLASH_API_SECRET}|g" \
    "${TMPL}" > "${OUT}"

chmod 600 "${OUT}"

printf '✓ 已写入: %s\n' "$OUT"
printf '  Clash API: http://127.0.0.1:%s (secret len=%d)\n' \
    "$CLASH_API_PORT" "${#CLASH_API_SECRET}"
printf '  Server: %s:%s\n' "$SERVER_HOST" "$SERVER_PORT"
printf '\n提示: 使用此配置测试前，请确认 sing-box 有 TUN 权限:\n'
printf '  sudo sh -c "echo \"%%(whoami)s ALL=(root) NOPASSWD: /path/to/sing-box\" >> /etc/sudoers.d/pangolin"\n'
