#!/bin/bash

CWD=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)

## 扩展包兼容性字典
declare -A DB

# --- 新增：从 pypi.dict 获取 DATA ---
DICT_FILE="${CWD}/pypi23.dict"

if [[ -f "$DICT_FILE" ]]; then
    # 读取文件，忽略空行，将 pkg:ver 转换为关联数组
    while IFS=: read -r pkg ver || [[ -n "$pkg" ]]; do
        [[ -z "$pkg" || "$pkg" =~ ^# ]] && continue # 跳过空行和注释
        DB["$pkg"]="$ver"
    done < "$DICT_FILE"
else
    echo -e "\033[31m错误: 未找到 $DICT_FILE \033[0m"
    exit 1
fi
# ------------------------------------

## 版本锁定名单
LOCKED=(
    # 系统预装库
    "attrs==23.1.0"
    "certifi==2020.6.20"
    "chardet==4.0.0"
    "charset-normalizer==3.3.0"
    "decorator==4.4.2"
    "GDAL==3.8.1"
    "idna==2.10"
    "importlib-metadata==4.6.4"
    "ipython-genutils==0.2.0"
    "Jinja2==3.0.3"
    "jsonschema==3.2.0"
    "jupyter_core==5.3.2"
    "lxml==4.9.3"
    "MarkupSafe==2.1.3"
    "more-itertools==8.10.0"
    "nbformat==5.1.3"
    "numpy==1.24.2"
    "OWSLib==0.27.2"
    "packaging==23.2"
    "pbr==5.6.0"
    "pip==23.1.2"
    "platformdirs==4.0.0"
    "plotly==5.15.0"
    "ply==3.11"
    "psycopg2==2.9.9"
    "Pygments==2.15.1"
    "pyproj==3.6.1"
    "PyQt-builder==1.15.4"
    "PyQt5==5.15.10"
    "PyQt5-sip==12.13.0"
    "pyrsistent==0.18.1"
    "python-dateutil==2.8.1"
    "pytz==2024.1"
    "PyYAML==6.0.1"
    "QScintilla==2.13.3"
    "requests==2.31.0"
    "setuptools==68.1.2"
    "sip==6.7.12"
    "six==1.16.0"
    "tenacity==8.2.1"
    "termcolor==1.1.0"
    "traitlets==5.5.0"
    "urllib3==1.26.5"
    "wheel==0.41.2"
    "zipp==1.0.0"

    # 常用GIS核心库
    "scipy==1.10.1"
    "pandas==1.5.3"
    "shapely==2.0.2"
    "fiona==1.9.5"
    "geopandas==0.14.4"
)

## 处理安装逻辑
INSTALL_LIST=()
for pkg in "$@"; do
    if [[ -n "${DB[$pkg]}" ]]; then
        INSTALL_LIST+=("${pkg}==${DB[$pkg]}")
    else
        INSTALL_LIST+=("$pkg")
    fi
done

if [ ${#INSTALL_LIST[@]} -eq 0 ]; then
    echo -e "\033[33mQGIS-Python模块安装工具\033[0m"
    echo "用法: qpip-get <包名>"
    exit 1
fi

## 执行安装
LOCKLIST=/tmp/locklist.txt
printf "%s\n" "${LOCKED[@]}" > ${LOCKLIST}

echo "🚀 开始执行安装..."
echo "--------------------------------------"

for pkg in "${INSTALL_LIST[@]}"; do
    display_name=$(echo "$pkg" | cut -d'=' -f1)

    output=$(python3.11 -m pip install \
        --user \
        --break-system-packages \
        --upgrade-strategy only-if-needed \
        -c ${LOCKLIST} \
        "$pkg" 2>&1)

    exit_code=$?

    if [ $exit_code -ne 0 ]; then
        echo "❌ $display_name: 安装失败"
        echo "   原因: $(echo "$output" | grep -iE "error|conflict" | head -n 1)"
    elif echo "$output" | grep -q "Successfully installed"; then
        new_ver=$(echo "$output" | grep "Successfully installed" | awk '{print $NF}')
        echo "✅ $display_name: 安装成功 (版本: $new_ver)"
    else
        current_ver=$(python3.11 -m pip show "$display_name" 2>/dev/null | grep "^Version:" | awk '{print $2}')
        echo "OK: $display_name 已就绪 (版本: ${current_ver:-已存在})"
    fi
done

echo "--------------------------------------"
echo "🚀 所有任务处理完毕。"

rm ${LOCKLIST}