#!/bin/bash
# upgrade_callback：升级**之后**执行。
#
# 数据健康检查——只报告，不阻断升级。升级已完成，此时失败退出只会让用户
# 看到「失败」但数据已更新的混乱状态。
set -uo pipefail

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

tp_dump_env upgrade_callback
tp_log upgrade_callback "升级后健康检查开始"

data="$(tp_data_dir)"
issues=""

if [ ! -d "$data" ]; then
    issues="$issues 数据目录不存在。"
elif [ ! -w "$data" ]; then
    issues="$issues 数据目录不可写。"
fi

db="$data/totpilot.db"
if [ -f "$db" ]; then
    if command -v sqlite3 >/dev/null 2>&1; then
        if ! sqlite3 "$db" 'PRAGMA quick_check;' >/dev/null 2>&1; then
            issues="$issues 数据库完整性检查未通过。"
        fi
    elif [ ! -s "$db" ]; then
        issues="$issues 数据库文件为空。"
    fi
fi

if [ ! -f "$data/master.key" ]; then
    issues="$issues 主密钥文件缺失（新装首次启动时会自动生成）。"
fi

printf '%s' "$(tp_app_ver)" > "$data/.last-version"
tp_chown_to_app_user "$data/.last-version"
tp_chown_to_app_user "$data"

if [ -n "$issues" ]; then
    tp_log upgrade_callback "健康检查发现问题：$issues"
    tp_user_error "令牌中枢升级完成，但数据目录检查发现问题：${issues} 请检查 ${data}，备份在 $data/backup 下。"
    exit 0
fi

tp_log upgrade_callback "健康检查通过"
exit 0
