#!/bin/bash
#
# Octop 本地版 — 重新配置回调（应用「设置」窗口提交后执行）
#
# 只处理管理员改密：两栏都空则保持不变；填了则更新 PKGVAR/.env、
# octop-login.txt 应急备份，并对已初始化实例调用 octop user passwd。
# 日志与 API Key 请在 Web 控制台配置。
#
set -euo pipefail

_OCTOP_COMMON="$(dirname "$0")/common.sh"
[ -f "$_OCTOP_COMMON" ] || _OCTOP_COMMON="/var/apps/octop-native/cmd/common.sh"
[ -f "$_OCTOP_COMMON" ] && source "$_OCTOP_COMMON"

PKGVAR="${TRIM_PKGVAR:-/var/apps/octop-native/var}"
APPDEST="${TRIM_APPDEST:-/var/apps/octop-native}"
mkdir -p "$PKGVAR"
ENV_FILE="$PKGVAR/.env"

if [ -n "${TRIM_DATA_SHARE_PATHS:-}" ]; then
    DATA_DIR="${TRIM_DATA_SHARE_PATHS%%:*}"
else
    DATA_DIR="${APPDEST}/shares/octop-native/data"
fi
mkdir -p "$DATA_DIR"

CUR_USER="$(octop_env_get "$ENV_FILE" OCTOP_ADMIN_USERNAME)"
CUR_PASS="$(octop_env_get "$ENV_FILE" OCTOP_DEFAULT_PASSWORD)"
[ -n "$CUR_USER" ] || CUR_USER="admin"

WIZARD_PASSWORD="$(octop_sanitize_value "${wizard_admin_password:-}")"
WIZARD_CONFIRM="$(octop_sanitize_value "${wizard_admin_password_confirm:-}")"

fail_config() {
    echo "[octop-native] $1" > "${TRIM_TEMP_LOGFILE:-/dev/null}" 2>&1 || true
    echo "[octop-native] $1" >&2 || true
    exit 1
}

if ! REASON="$(octop_validate_optional_password_change "$WIZARD_PASSWORD" "$WIZARD_CONFIRM" 2>&1)"; then
    fail_config "$REASON"
fi

PASS_CHANGED=0
if [ -n "$WIZARD_PASSWORD" ]; then
    ADMIN_PASS="$WIZARD_PASSWORD"
    PASS_CHANGED=1
else
    ADMIN_PASS="$CUR_PASS"
fi

OCTOP_HOME="${DATA_DIR}/.octop"
MAIN="$APPDEST/cmd/main"
if [ "$PASS_CHANGED" = "1" ] && [ -f "$OCTOP_HOME/octop.db" ]; then
    echo "[octop-native] 检测到已初始化实例，先停止服务再离线修改管理员密码 ..." > "${TRIM_TEMP_LOGFILE:-/dev/null}" 2>&1 || true
    [ -x "$MAIN" ] && "$MAIN" stop >/dev/null 2>&1 || true
    if "$APPDEST/bin/octop-cli" user passwd "$CUR_USER" --password "$ADMIN_PASS" > "${TRIM_TEMP_LOGFILE:-/dev/null}" 2>&1; then
        echo "[octop-native] 已通过官方 CLI 修改管理员密码" > "${TRIM_TEMP_LOGFILE:-/dev/null}" 2>&1 || true
    else
        octop_mark_fnos_passwd_pending "$DATA_DIR"
        echo "[octop-native] 警告：离线改密未成功，已记下待下次启动同步。" > "${TRIM_TEMP_LOGFILE:-/dev/null}" 2>&1 || true
    fi
    [ -x "$MAIN" ] && "$MAIN" start >/dev/null 2>&1 || true
fi

if [ "$PASS_CHANGED" = "1" ]; then
    octop_env_set "$ENV_FILE" OCTOP_DEFAULT_PASSWORD "$ADMIN_PASS"
    echo "[octop-native] 已更新配置: $ENV_FILE" > "${TRIM_TEMP_LOGFILE:-/dev/null}" 2>/dev/null || true
    octop_write_login_file "$DATA_DIR" "$CUR_USER" "$ADMIN_PASS" 8089
fi

WIZARD_TEMPLATE="$APPDEST/wizard/config.template"
WIZARD_DIR="$(dirname "$APPDEST")/wizard"
[ -f "$WIZARD_TEMPLATE" ] || WIZARD_TEMPLATE="${APPDEST}/../wizard/config"
octop_render_config_wizard "$WIZARD_TEMPLATE" "$WIZARD_DIR" "$CUR_USER" "$ADMIN_PASS" "$DATA_DIR"

fix_ownership_and_perms "$PKGVAR" "$ENV_FILE"
exit 0
