#!/bin/bash
# 升级文件就位后执行（以 root 运行）：
# 1. 把新版源码同步到可写运行目录，保留 data/runtime/.env；
# 2. 重新 chown 给 xfserver、修复 frps 执行位；
# 3. 按持久配置重新同步桌面入口端口（新包 ui/config 会被重置为默认端口）。
# 用户、套餐、节点等数据位于 @appdata，升级不丢失。
set -e

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

# 1. 同步源码：删除运行目录中已不存在于新包的文件，但保留可变数据。
mkdir -p "$WORK_DIR"
if command -v rsync >/dev/null 2>&1; then
    rsync -a --delete \
        --exclude='data/' --exclude='runtime/' --exclude='.env' \
        "$SRC/" "$WORK_DIR/"
else
    find "$WORK_DIR" -mindepth 1 -maxdepth 1 \
        ! -name data ! -name runtime ! -name .env \
        -exec rm -rf {} + 2>/dev/null || true
    cp -a "$SRC/." "$WORK_DIR/"
fi
[ -f "$WORK_DIR/bin/frps" ] && chmod 700 "$WORK_DIR/bin/frps" 2>/dev/null || true
chown -R "$APP_USER:$APP_USER" "$TRIM_PKGVAR" 2>/dev/null || true

# 2. 准备数据目录。
mkdir -p "${TRIM_PKGVAR}/data/server" "${TRIM_PKGVAR}/runtime/server" 2>/dev/null || true
chown -R "$APP_USER:$APP_USER" "$TRIM_PKGVAR" 2>/dev/null || true

# 3. 按持久配置同步桌面入口端口。
PORT=8080
if [ -f "$CONF_FILE" ]; then
    while IFS='=' read -r key value; do
        if [ "$key" = "SERVER_PORT" ]; then
            case "$value" in
                ''|*[!0-9]*) ;;
                *)
                    if [ "$value" -ge 1 ] 2>/dev/null && [ "$value" -le 65535 ] 2>/dev/null; then
                        PORT="$value"
                    fi
                    ;;
            esac
        fi
    done < "$CONF_FILE"
fi
if [ -f "$UI_CONFIG" ]; then
    sed -i "s/\"port\": *\"[0-9]*\"/\"port\": \"$PORT\"/" "$UI_CONFIG"
fi

exit 0
