#!/bin/bash
# ============================================================================
# postrm - Debian 包卸载后脚本
# ============================================================================
# 功能: 在 deb 包卸载后清理系统级配置和用户数据
# 调用时机:
#   - remove: apt remove testpkg (保留用户数据)
#   - purge:  apt purge testpkg (完全删除)
# ============================================================================

set -e  # 遇到错误立即退出

# ============================================================================
# 脚本参数说明
# ============================================================================
# $1 可能的值:
#   - remove            : 卸载包,但保留用户配置
#   - purge             : 完全清除包及所有数据
#   - upgrade           : 升级到新版本
#   - failed-upgrade    : 升级失败后回退
#   - abort-install     : 安装中止
#   - abort-upgrade     : 升级中止
#   - disappear         : 包被替换

case "$1" in
    # ------------------------------------------------------------------------
    # remove: 普通卸载 (apt remove testpkg)
    # ------------------------------------------------------------------------
    # 行为: 删除程序文件,但保留用户配置和数据
    # 场景: 用户暂时不用,但希望保留历史数据,便于将来重新安装
    remove)
        # 清理系统命令链接
        update-alternatives --remove testpkg /opt/Testpkg/testpkg 2>/dev/null || true

        # 友好提示用户数据已保留
        # 注意: dpkg -P 会先调用 remove 再调用 purge,所以这里只是中间提示
        echo "Testpkg 已卸载。用户数据已保留在:"
        echo "  ~/.config/testpkg"
        echo "  ~/.local/share/testpkg"
        echo "  ~/.config/testpkg-electron"
        ;;

    # ------------------------------------------------------------------------
    # purge: 完全清除 (apt purge testpkg)
    # ------------------------------------------------------------------------
    # 行为: 删除程序文件 + 所有用户配置和数据
    # 场景: 彻底不用了,清理干净释放磁盘空间
    purge)
        # 清理系统命令链接
        update-alternatives --remove testpkg /opt/Testpkg/testpkg 2>/dev/null || true

        # 获取所有真实用户的主目录 (排除系统服务账号)
        # 匹配 /home/* 和 /root
        USER_HOMES=$(getent passwd | grep -E '/home/|/root' | cut -d: -f6 | sort -u)

        # 遍历所有用户,删除应用相关数据
        for user_home in $USER_HOMES; do
            if [ -d "$user_home" ]; then
                # XDG Base Directory 规范路径
                CONFIG_DIR="$user_home/.config/testpkg"
                DATA_DIR="$user_home/.local/share/testpkg"
                ELECTRON_DIR="$user_home/.config/testpkg-electron"

                # 删除配置目录
                if [ -d "$CONFIG_DIR" ]; then
                    rm -rf "$CONFIG_DIR"
                    echo "已删除: $CONFIG_DIR"
                fi

                # 删除数据目录 (日志、报告等)
                if [ -d "$DATA_DIR" ]; then
                    rm -rf "$DATA_DIR"
                    echo "已删除: $DATA_DIR"
                fi

                # 删除 Electron 数据目录 (会话、首选项等)
                if [ -d "$ELECTRON_DIR" ]; then
                    rm -rf "$ELECTRON_DIR"
                    echo "已删除: $ELECTRON_DIR"
                fi
            fi
        done

        echo "所有用户数据已删除。"
        ;;

    # ------------------------------------------------------------------------
    # upgrade 等其他场景: 不做任何清理
    # ------------------------------------------------------------------------
    # 原因:
    #   - upgrade: 升级时不应删除配置
    #   - failed-upgrade: 失败时保留现场便于调试
    #   - abort-*: 中止操作不应有副作用
    upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
        ;;

    # ------------------------------------------------------------------------
    # 未知参数: 报错退出
    # ------------------------------------------------------------------------
    *)
        echo "postrm 使用了未知参数 \`$1'" >&2
        exit 1
        ;;
esac

exit 0
