#!/bin/bash
# 安装完成后写入 app.env（ENCRYPTION_KEY + 用户选择的端口）
log_fail() {
  if [ -n "${TRIM_TEMP_LOGFILE:-}" ]; then
    echo "$1" >"$TRIM_TEMP_LOGFILE"
  fi
  echo "$1" >&2
}

upsert_kv() {
  local file="$1" key="$2" value="$3"
  mkdir -p "$(dirname "$file")"
  if [ -f "$file" ] && grep -q "^${key}=" "$file" 2>/dev/null; then
    if sed --version >/dev/null 2>&1; then
      sed -i "s|^${key}=.*|${key}=${value}|" "$file"
    else
      sed -i '' "s|^${key}=.*|${key}=${value}|" "$file"
    fi
  else
    echo "${key}=${value}" >>"$file"
  fi
}

ETC="${TRIM_PKGETC:-}"
VAR="${TRIM_PKGVAR:-}"

if [ -z "$ETC" ] || [ -z "$VAR" ]; then
  log_fail "缺少 TRIM_PKGETC 或 TRIM_PKGVAR"
  exit 1
fi

mkdir -p "$ETC" "$VAR/data" || {
  log_fail "无法创建配置/数据目录"
  exit 1
}

PORT_VAL="${wizard_port:-${TRIM_SERVICE_PORT:-3001}}"
case "$PORT_VAL" in
  ''|*[!0-9]*) PORT_VAL=3001 ;;
esac
if [ "$PORT_VAL" -lt 1 ] || [ "$PORT_VAL" -gt 65535 ]; then
  PORT_VAL=3001
fi

if command -v openssl >/dev/null 2>&1; then
  KEY="$(openssl rand -hex 32)"
else
  KEY="$(head -c 32 /dev/urandom | xxd -p -c 32)"
fi

ENV_FILE="$ETC/app.env"
if [ -f "$ENV_FILE" ] && grep -q '^ENCRYPTION_KEY=' "$ENV_FILE"; then
  echo "保留已有 ENCRYPTION_KEY"
else
  cat >"$ENV_FILE" <<EOF
ENCRYPTION_KEY=${KEY}
PORT=${PORT_VAL}
HOST=0.0.0.0
HOST_BIND=0.0.0.0
NODE_ENV=production
FREEAPI_DB_PATH=${VAR}/data/freeapi.db
FREEAPI_OPEN_FIRST_SETUP=1
EOF
  chmod 600 "$ENV_FILE" || true
fi

# Keep / patch keys on reinstall & upgrade paths
upsert_kv "$ENV_FILE" PORT "$PORT_VAL"
if ! grep -q '^HOST=' "$ENV_FILE"; then
  echo 'HOST=0.0.0.0' >>"$ENV_FILE"
fi
if ! grep -q '^HOST_BIND=' "$ENV_FILE"; then
  echo 'HOST_BIND=0.0.0.0' >>"$ENV_FILE"
fi
if ! grep -q '^FREEAPI_OPEN_FIRST_SETUP=' "$ENV_FILE"; then
  echo 'FREEAPI_OPEN_FIRST_SETUP=1' >>"$ENV_FILE"
fi
if ! grep -q '^FREEAPI_DB_PATH=' "$ENV_FILE"; then
  echo "FREEAPI_DB_PATH=${VAR}/data/freeapi.db" >>"$ENV_FILE"
fi

# Persist for desktop entry + main port priority (wizard field name kept for system)
{
  echo "wizard_port=${PORT_VAL}"
  echo "PORT=${PORT_VAL}"
} >"$ETC/settings.conf"

echo "Prepared FreeLLMAPI app.env PORT=${PORT_VAL}"
exit 0
