#!/bin/bash
# upgrade_callback：升级**之后**执行。
#
# 做数据健康检查——只报告，不阻断升级。升级已经完成，
# 此时失败退出只会让用户看到一个「失败」但数据已更新的混乱状态；
# 有问题写进日志与用户可见提示，由用户决定下一步。
set -uo pipefail

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

sm_dump_env upgrade_callback
sm_log upgrade_callback "升级后健康检查开始"

data="$(sm_data_dir)"
issues=""

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

# 数据库可读性：有 sqlite3 就查一下，没有就只查文件存在与大小。
db="$data/sitemanager.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

# 版本标记更新为新版本。
printf '%s' "$(sm_app_ver)" > "$data/.last-version"
sm_chown_to_app_user "$data/.last-version"

# 权限兜底：升级可能重写了部分文件属主。
sm_chown_to_app_user "$data"

if [ -n "$issues" ]; then
    sm_log upgrade_callback "健康检查发现问题：$issues"
    sm_user_error "站点管理升级完成，但数据目录检查发现问题：${issues} 请检查 ${data}，备份在 $data/backup 下。"
    # 不阻断升级。
    exit 0
fi

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