#!/bin/bash
#
# Octop — 安装后回调
#
# 安装向导只收集用户自己设的管理员账号（用户名 / 密码确认，显示名与邮箱可选）。
# 凭据写入 .env、data-share 引导文件与 octop-login.txt，供容器首次 init / 改密。
#
set -euo pipefail

# 共享函数库（find_python312 / fix_ownership_and_perms / free_octop_ports /
# octop_generate_password / octop_validate_password / octop_write_login_file /
# octop_render_config_wizard 等）
# 打包时由 scripts/build-fpk.sh 注入；仓库内运行无此文件时跳过（函数缺失时再报错）。
_OCTOP_COMMON="$(dirname "$0")/common.sh"
[ -f "$_OCTOP_COMMON" ] || _OCTOP_COMMON="/var/apps/octop/cmd/common.sh"
[ -f "$_OCTOP_COMMON" ] && source "$_OCTOP_COMMON"

# 释放 Octop 端口（8088=Docker 版，8089=本地版），杀掉残留/孤儿进程，避免重装端口冲突。
free_octop_ports

ENV_FILE="${TRIM_APPDEST:-/var/apps/octop/target}/docker/.env"
mkdir -p "$(dirname "$ENV_FILE")"

# 挂飞牛 data-share（TRIM_DATA_SHARE_PATHS），升级/重启都保留；旧 share/ 路径会迁过来。
DATA_DIR="$(octop_prepare_docker_persist "$ENV_FILE")"
mkdir -p "$DATA_DIR"

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

# ---------------------------------------------------------------------------
# 解析向导字段（wizard/install 的 field 名即环境变量名）
# ---------------------------------------------------------------------------
ADMIN_USER="$(octop_sanitize_value "${wizard_admin_username:-}")"
ADMIN_DISPLAY="$(octop_sanitize_value "${wizard_admin_display_name:-}")"
ADMIN_EMAIL="$(octop_sanitize_value "${wizard_admin_email:-}")"
WIZARD_PASSWORD="$(octop_sanitize_value "${wizard_admin_password:-}")"
WIZARD_CONFIRM="$(octop_sanitize_value "${wizard_admin_password_confirm:-}")"

if ! ADMIN_PASS_REASON="$(octop_validate_install_fields "$ADMIN_USER" "$WIZARD_PASSWORD" "$WIZARD_CONFIRM" "$ADMIN_EMAIL" "$ADMIN_DISPLAY" 2>&1)"; then
    fail_install "$ADMIN_PASS_REASON"
fi
ADMIN_PASS="$WIZARD_PASSWORD"

{
    echo "OCTOP_PORT=8088"
    echo "OCTOP_BIND_HOST=0.0.0.0"
    echo "OCTOP_LOG_LEVEL=info"
    echo "OCTOP_ADMIN_USERNAME=${ADMIN_USER}"
    echo "OCTOP_DEFAULT_PASSWORD=${ADMIN_PASS}"
    echo "OCTOP_ADMIN_DISPLAY_NAME=${ADMIN_DISPLAY}"
    echo "OCTOP_ADMIN_EMAIL=${ADMIN_EMAIL}"
    echo "TRIM_DATA_SHARE_PATHS=${DATA_DIR}"
    echo "OCTOP_DATA=${DATA_DIR}"
} > "$ENV_FILE"

chmod 600 "$ENV_FILE"
octop_persist_docker_env "$ENV_FILE"
octop_write_fnos_bootstrap "$DATA_DIR" "$ADMIN_USER" "$ADMIN_PASS" "$ADMIN_DISPLAY" "$ADMIN_EMAIL"
octop_distribute_docker_env "$ENV_FILE" "$DATA_DIR"
if [ -f "${DATA_DIR}/.octop/octop.db" ]; then
    octop_mark_fnos_passwd_pending "$DATA_DIR"
fi
echo "[octop] 已写入配置: $ENV_FILE（data-share=${DATA_DIR}）" > "${TRIM_TEMP_LOGFILE:-/dev/null}" 2>/dev/null || true

# ---------------------------------------------------------------------------
# 凭据应急备份（octop-login.txt）+ 渲染「设置」窗口用户名
# ---------------------------------------------------------------------------
octop_write_login_file "$DATA_DIR" "$ADMIN_USER" "$ADMIN_PASS" 8088

WIZARD_TEMPLATE="${TRIM_APPDEST:-/var/apps/octop/target}/wizard/config.template"
WIZARD_DIR="$(dirname "${TRIM_APPDEST:-/var/apps/octop/target}")/wizard"
[ -f "$WIZARD_TEMPLATE" ] || WIZARD_TEMPLATE="${TRIM_APPDEST:-/var/apps/octop/target}/../wizard/config"
octop_render_config_wizard "$WIZARD_TEMPLATE" "$WIZARD_DIR" "$ADMIN_USER" "$ADMIN_PASS" "$DATA_DIR"

exit 0
