#!/bin/bash
# Deepin25 软件包批量恢复/升级脚本 | 万能最终版
# ✅ 核心特性：任意目录同文件夹即可运行、sudo apt upgrade、自动识别路径、零参数
# ========== 终极路径写法：自动获取【脚本自身】所在目录（永不跑偏） ==========
# 兼容所有执行方式，精准定位脚本所在文件夹，无视终端当前目录
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
# 备份文件/失败日志，强制和脚本在【同一文件夹】
BACKUP_FILE="${SCRIPT_DIR}/package_list_installed.txt"
FAILED_FILE="${SCRIPT_DIR}/failed_packages.txt"

# 校验：备份文件是否和脚本同目录存在
if [ ! -f "${BACKUP_FILE}" ]; then
    echo -e "\033[31m❌ 错误：未在【脚本同目录】找到备份文件！\033[0m"
    echo -e "\033[33m🔍 要求：package_list_installed.txt 必须和本脚本放在同一个文件夹\033[0m"
    echo -e "\033[32m📌 一键生成备份文件命令（直接复制）：\033[0m dpkg --get-selections | grep -v deinstall > ${BACKUP_FILE}"
    exit 1
fi

# 清空同目录的失败日志
> "${FAILED_FILE}"

# 批量升级/安装核心逻辑
echo -e "\033[32m✅ ✅ 脚本所在目录：${SCRIPT_DIR}\033[0m"
echo -e "\033[32m✅ 开始批量处理软件包 | 核心命令：sudo apt upgrade -y\033[0m\n"

# 过滤无效行，逐包处理
grep -vE "^#|^$" "${BACKUP_FILE}" | while read -r line; do
    pkg=$(echo "$line" | awk '{print $1}')
    [ -z "$pkg" ] && continue

    echo -e "🔧 正在处理：$pkg"
    if sudo apt upgrade "${pkg}" -y; then
        echo -e "\033[32m✅ 成功：$pkg（安装/升级完成）\033[0m\n"
    else
        echo -e "\033[31m❌ 失败：$pkg → 已记录到同目录 failed_packages.txt\033[0m\n"
        echo "${pkg}" >> "${FAILED_FILE}"
    fi
done

# 执行结果汇总
echo -e "=================================================="
echo -e "\033[32m🎉 全部软件包处理完成！\033[0m"
if [ -s "${FAILED_FILE}" ]; then
    fail_num=$(wc -l < "${FAILED_FILE}")
    echo -e "\033[33m⚠️  共 ${fail_num} 个包失败 → 查看：${FAILED_FILE}\033[0m"
else
    echo -e "\033[32m✅ 所有包处理成功！已删除空日志\033[0m"
    rm -f "${FAILED_FILE}"
fi
