#!/bin/bash
# 卸载后回调（飞牛文档《应用框架》：卸载清理后执行）。
#
# 【重要】飞牛的「手动安装」（应用中心 → 手动安装 → 从 NAS 添加 fpk）会先执行本回调、再安装新版本，
# 因此本回调**绝不能无条件删除数据**。旧版本（≤0.1.15）在此处无条件 rm -rf 数据目录，
# 造成 2026-10-09 用户升级后证书/私钥/授权/流水线全丢的事故——该行为已废弃。
#
# 现行策略（按飞牛文档《用户向导》推荐做法：在 wizard/uninstall 中收集选择、在卸载脚本中执行）：
#   · 是否删除数据由卸载向导项 wizard_keep_data 决定（fpk/wizard/uninstall，默认"保留"）；
#   · 变量缺失（例如安装流程内部触发的卸载、CLI 未提供环境变量文件）一律按"保留"处理（失败安全）。
# keep=0（向导明确选择删除）时的清理范围：
#   · 应用数据目录（TRIM_PKGVAR）与旧位置目录（TRIM_PKGHOME）：清空内容——含点文件——保留目录本身；
#   · TRIM_DATA_SHARE_PATHS（应用在 manifest 声明的共享目录）：内容归应用所有，清空其内容（含点文件）；
#   · TRIM_DATA_ACCESSIBLE_PATHS（用户授权目录）：根内容属于用户，**绝不触碰**——只删除
#     应用自己创建的 CertDock-export 子目录（存在时）。
. "$(dirname "$0")/lib.sh"
require_env TRIM_PKGVAR TRIM_PKGHOME
probe_lifecycle uninstall_callback

KEEP=1
case "$(printf '%s' "${wizard_keep_data:-1}" | tr '[:upper:]' '[:lower:]')" in
  0 | false | no | off) KEEP=0 ;;
esac

if [ "$KEEP" = "1" ]; then
  echo "CertDock 已卸载；数据保留在 ${TRIM_PKGVAR}（重新安装后自动继续使用）。"
  echo "如需彻底清除：rm -rf \"${TRIM_PKGVAR}\"/* \"${TRIM_PKGHOME}\"/*"
  exit 0
fi

echo "CertDock 已卸载；按卸载向导的选择删除全部数据 ..."
# ① 应用数据目录与旧位置目录：清空内容（含点文件，如 .last-version）、保留目录本身；
# 用 find 而非通配符，点文件不再漏删。目录不存在时跳过（与旧行为一致：对缺失路径不报错）。
for d in "${TRIM_PKGVAR:?}" "${TRIM_PKGHOME:?}"; do
  [ -d "$d" ] || continue
  if ! find "$d" -mindepth 1 -maxdepth 1 -exec rm -rf {} +; then
    fail_msg "错误：部分应用数据删除失败，请手工检查 ${TRIM_PKGVAR} 与 ${TRIM_PKGHOME}"
    exit 1
  fi
done
# ② 0.1.59 起不再声明共享目录（config/resource 去掉 data-share）：导出只写用户授权目录，
#   共享目录无需清理；历史版本创建过的 @appshare 目录若仍存在，由用户自行处理。
# ③ TRIM_DATA_ACCESSIBLE_PATHS：用户授权目录，根内容绝不触碰——只删应用创建的 CertDock-export 子目录
if [ -n "${TRIM_DATA_ACCESSIBLE_PATHS:-}" ]; then
  IFS=':' read -r -a accessPaths <<<"$TRIM_DATA_ACCESSIBLE_PATHS"
  for a in "${accessPaths[@]}"; do
    if [ -n "$a" ] && [ -d "$a/CertDock-export" ]; then
      rm -rf "${a:?}/CertDock-export" || fail_msg "警告：导出目录 ${a}/CertDock-export 清理失败，请手工检查"
    fi
  done
fi
exit 0
