#!/bin/bash

# 1. 定义系统锁定名单
LOCKED=(
    "attrs" "certifi" "chardet" "charset-normalizer" "decorator" 
    "GDAL" "idna" "importlib-metadata" "ipython-genutils" "Jinja2" 
    "jsonschema" "jupyter_core" "lxml" "MarkupSafe" "more-itertools" 
    "nbformat" "numpy" "OWSLib" "packaging" "pbr" "pip" 
    "platformdirs" "plotly" "ply" "psycopg2" "Pygments" "pyproj" 
    "PyQt-builder" "PyQt5" "PyQt5-sip" "pyrsistent" "python-dateutil" 
    "pytz" "PyYAML" "QScintilla" "requests" "setuptools" "sip" 
    "six" "tenacity" "termcolor" "traitlets" "urllib3" "wheel" "zipp"
)

if [ $# -eq 0 ]; then
    echo -e "\033[33mQGIS-Python模块卸载工具\033[0m"
    echo "用法: qpip-rm <包名1> <包名2> ..."
    exit 1
fi

INPUT_PKGS=("$@")
TO_REMOVE=()
LOCKED_FOUND=()

# 1. 第一步：扫描并分类
for pkg in "${INPUT_PKGS[@]}"; do
    pkg_lower=$(echo "$pkg" | tr '[:upper:]' '[:lower:]')
    is_locked=false
    
    for l in "${LOCKED[@]}"; do
        if [[ "$pkg_lower" == "$(echo "$l" | tr '[:upper:]' '[:lower:]')" ]]; then
            is_locked=true
            break
        fi
    done

    if [ "$is_locked" = true ]; then
        LOCKED_FOUND+=("$pkg")
    else
        TO_REMOVE+=("$pkg")
    fi
done

# 2. 第二步：回显告知用户
echo "🚀 卸载任务预审："
echo "--------------------------------------"

if [ ${#LOCKED_FOUND[@]} -ne 0 ]; then
    echo "⚠️  以下包为【系统预装/锁定】，将跳过卸载："
    for p in "${LOCKED_FOUND[@]}"; do
        echo "   - $p"
    done
    echo ""
fi

# 如果没有可卸载的包，直接退出
if [ ${#TO_REMOVE[@]} -eq 0 ]; then
    echo "💡 没有可安全卸载的包，任务结束。"
    exit 0
fi

echo "✅ 以下包将被安全卸载："
for p in "${TO_REMOVE[@]}"; do
    echo "   - $p"
done
echo "--------------------------------------"

# 3. 第三步：交互确认
# -p 提示信息，-n 1 表示只读取一个字符
read -p "❓ 确定要执行卸载吗？(y/N): " confirm
echo "" # 换行

if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
    echo "🚫 操作已取消。"
    exit 0
fi

# 4. 第四步：正式执行卸载
for pkg in "${TO_REMOVE[@]}"; do
    echo "正在处理: $pkg ..."
    python3.11 -m pip uninstall -y --break-system-packages "$pkg" > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo "   ✔ 成功移除"
    else
        echo "   ✘ 移除失败（包可能不存在）"
    fi
done

echo "--------------------------------------"
echo "✨ 任务处理完毕。"