#!/bin/bash
# uninstall_callback：卸载清理**之后**执行。
#
# 语义（设计文档 §2 决策 12）：
#   - 默认**保留**全部数据
#   - 仅当向导变量 wizard_keep_data 被显式设为假值时，才清理数据目录
#   - 必须失败安全：向导变量缺失、取值无法识别、环境异常，一律按「保留」处理
#
# 为什么如此保守：飞牛的「手动安装」会先执行卸载回调再走安装流程。
# 若这里默认删数据，用户每次重装都会丢光站点内容。
set -uo pipefail

SM_HOOK=uninstall_callback
SELF_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck source=lib.sh
. "$SELF_DIR/lib.sh"

sm_dump_env uninstall_callback

keep_raw="${wizard_keep_data:-}"

# 只有明确识别为假值才删。缺失/空串/无法识别一律按「保留」——
# 飞牛的「手动安装」会先跑本回调，默认删就等于每次重装都清空用户数据。
if ! sm_is_falsy "$keep_raw"; then
    sm_log uninstall_callback "卸载清理：wizard_keep_data=[$keep_raw] → 保留数据"
    exit 0
fi

sm_log uninstall_callback "卸载清理：wizard_keep_data=[$keep_raw] → 用户明确选择删除数据"

# 走到这里说明用户明确选择了删除。仍然逐项确认再删。
data="${TRIM_PKGVAR:-}"
if [ -z "$data" ]; then
    sm_log uninstall_callback "TRIM_PKGVAR 为空，无从删除，按保留处理"
    exit 0
fi
if [ ! -d "$data" ]; then
    sm_log uninstall_callback "数据目录不存在，无需删除"
    exit 0
fi

sm_log uninstall_callback "用户选择删除数据，开始清理 $data"
# 只删自己创建的内容，不删目录本身（目录归平台管）。
for item in sites logs backup tmp sitemanager.db sitemanager.db-wal sitemanager.db-shm .last-version app.pid; do
    rm -rf "$data/$item" 2>/dev/null || true
done
sm_log uninstall_callback "数据清理完成"
exit 0
