#!/bin/bash
# 升级后回调（飞牛文档《应用框架》：升级后执行；职责为数据迁移、配置迁移与兼容性检查）。
# 数据库 schema 迁移由服务启动时自动完成（cmd/main → certdock-server），此处只做：
#   1) 数据目录迁移：旧位置（TRIM_PKGHOME，≤0.1.15 的数据存放处）有数据而新位置
#      （TRIM_PKGVAR）没有时整体 cp -a 搬迁（与 install_callback 同源、幂等；只复制不删除）；
#   2) 数据目录健康检查（存在、可写、数据库可读）——发现异常时以告警形式写入用户可见日志，
#      但不阻断升级（升级已完成后回调失败无法回滚，真正的失败由服务启动时暴露）；
#   3) 写入版本标记文件 .last-version，便于诊断与回溯。
. "$(dirname "$0")/lib.sh"
require_env TRIM_PKGVAR
probe_lifecycle upgrade_callback

# 旧位置数据迁移（必须在健康检查之前）：仅当新位置尚无数据库而旧位置存在数据库时执行；
# 只复制、不删除；失败仅中文告警，不阻断升级（与 install_callback 同一逻辑，幂等）。
if [ -n "${TRIM_PKGHOME:-}" ] && [ ! -e "${TRIM_PKGVAR}/certdock.db" ] && [ -e "${TRIM_PKGHOME}/certdock.db" ]; then
  mkdir -p "${TRIM_PKGVAR}"
  echo "检测到旧位置数据（${TRIM_PKGHOME}），迁移到 ${TRIM_PKGVAR} ..."
  if cp -a "${TRIM_PKGHOME}/." "${TRIM_PKGVAR}/"; then
    echo "旧数据迁移完成。"
  else
    fail_msg "警告：旧数据迁移失败，请手工把 ${TRIM_PKGHOME} 下的内容复制到 ${TRIM_PKGVAR}"
  fi
fi

if [ ! -d "${TRIM_PKGVAR}" ]; then
  fail_msg "警告：数据目录 ${TRIM_PKGVAR} 不存在，CertDock 启动后会自动创建"
elif [ ! -w "${TRIM_PKGVAR}" ]; then
  fail_msg "警告：数据目录 ${TRIM_PKGVAR} 当前用户不可写，CertDock 可能无法保存数据"
fi
if [ -e "${TRIM_PKGVAR}/certdock.db" ] && [ ! -r "${TRIM_PKGVAR}/certdock.db" ]; then
  fail_msg "警告：数据库文件不可读（${TRIM_PKGVAR}/certdock.db），请检查属主与权限"
fi

printf '%s' "${TRIM_APPVER:-unknown}" >"${TRIM_PKGVAR}/.last-version" 2>/dev/null || true
echo "CertDock 升级完成（版本 ${TRIM_APPVER:-未知}）：数据目录 ${TRIM_PKGVAR} 就绪。"
exit 0
