#!/bin/bash
# 安装文件就位后执行（以 root 运行）：
# 1. 校验安装向导的 Web 端口与 frpc 锁密码，写入 @appconf（0600）；
# 2. 把全部源码从安装目录复制到可写运行目录 @appdata/xfclient/server，并 chown 给 xfclient；
# 3. 同步桌面入口端口、创建数据目录。
# 此后应用的启动/停止只由 cmd/main 负责，不再在启动时同步文件。
set -e

APP_USER="${TRIM_USERNAME:-xfclient}"
SRC="$TRIM_APPDEST/server"
WORK_DIR="$TRIM_PKGVAR/server"
CONF_DIR="$TRIM_PKGETC"
CONF_FILE="$CONF_DIR/xfclient.env"
UI_CONFIG="$TRIM_APPDEST/ui/config"

DEFAULT_PORT=7400
DEFAULT_PASSWORD='xfcloud@123'

PORT="${wizard_client_port:-$DEFAULT_PORT}"
PASSWORD="${wizard_frpc_password:-$DEFAULT_PASSWORD}"

# 校验端口 1-65535。
case "$PORT" in
  ''|*[!0-9]*)
    echo "Web 控制台端口无效：$PORT" > "$TRIM_TEMP_LOGFILE"
    exit 1
    ;;
esac
if [ "$PORT" -lt 1 ] || [ "$PORT" -gt 65535 ]; then
  echo "Web 控制台端口须在 1-65535 之间：$PORT" > "$TRIM_TEMP_LOGFILE"
  exit 1
fi

# 校验锁密码长度（app.js 同样要求 6-128 位）。
if [ "${#PASSWORD}" -lt 6 ] || [ "${#PASSWORD}" -gt 128 ]; then
  echo "frpc 锁密码长度须为 6-128 位" > "$TRIM_TEMP_LOGFILE"
  exit 1
fi

# 1. 写持久配置（0600）。用 printf 逐行写入，值只作为数据、不做二次解析。
mkdir -p "$CONF_DIR"
umask 077
printf '%s=%s\n' CLIENT_PORT "$PORT" > "$CONF_FILE"
printf '%s=%s\n' CLIENT_FRPC_PASSWORD "$PASSWORD" >> "$CONF_FILE"
chmod 600 "$CONF_FILE"
chown "$APP_USER:$APP_USER" "$CONF_FILE" 2>/dev/null || true

# 2. 源码就位到可写运行目录（应用从此目录启动，在线更新也写入此处）。
mkdir -p "$WORK_DIR"
cp -a "$SRC/." "$WORK_DIR/"
[ -f "$WORK_DIR/bin/frpc" ] && chmod 700 "$WORK_DIR/bin/frpc" 2>/dev/null || true

# 3. 数据目录，并把整个 @appdata 运行区归属应用用户（root 复制出的文件默认属 root，必须 chown）。
mkdir -p "${TRIM_PKGVAR}/data/client" "${TRIM_PKGVAR}/runtime/client"
chown -R "$APP_USER:$APP_USER" "$TRIM_PKGVAR" 2>/dev/null || true

# 4. 端口与默认值不同时，同步桌面 iframe 入口端口。
if [ -f "$UI_CONFIG" ] && [ "$PORT" != "$DEFAULT_PORT" ]; then
    sed -i "s/\"port\": *\"[0-9]*\"/\"port\": \"$PORT\"/" "$UI_CONFIG"
fi

exit 0
