#!/bin/bash

# set -x
set -e


# 脚本名称: simple_dep_download.sh
# 功能: 下载指定deb包的所有依赖包（简化版）

# 检查参数
if [ $# -ne 1 ]; then
    echo "用法: $0 <包名或deb文件>"
    exit 1
fi

input="$1"

# 获取包名
if [ -f "$input" ]; then
    input=$(realpath "$input")  # 获取绝对路径
    pkg_name=$(dpkg-deb -f "$input" Package)
    if [ -z "$pkg_name" ]; then
        echo "错误: 无法从deb文件获取包名"
        exit 1
    fi
else
    pkg_name="$input"
fi

# 创建保存目录
save_dir="deps/"
rm -rf "$save_dir"  # 删除旧目录
mkdir -p "$save_dir"
cd "$save_dir" || exit 1

# 分析和下载依赖
echo "正在分析 $input 的依赖关系..."
if [ -f "$input" ]; then
    # 使用dpkg-deb分析本地deb包的依赖
    direct_deps=$(dpkg-deb -f "$input" Depends | tr ',' '\n' | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' | \
           sed -e 's/ *[(][^)]*[)] *//g' | sort -u)
    
    # 使用apt-cache递归分析所有依赖
    deps=""
    for dep in $direct_deps; do
        deps="$deps"$'\n'"$(apt-cache depends --recurse --no-recommends --no-suggests \
            --no-conflicts --no-breaks --no-replaces --no-enhances \
            "$dep" | grep "^[a-zA-Z]" | sort -u)"
    done
    deps=$(echo "$deps" | sort -u)
else
    # 使用apt-cache分析在线包的依赖
    deps=$(apt-cache depends --recurse --no-recommends --no-suggests \
        --no-conflicts --no-breaks --no-replaces --no-enhances \
        "$pkg_name" | grep "^[a-zA-Z]" | sort -u)
fi

# 检查是否找到依赖
if [ -z "$deps" ]; then
    echo "错误: 未找到任何依赖，请检查包名是否正确"
    exit 1
fi

array=($deps)
total=${#array[@]}
echo "找到 $total 个依赖包，开始下载..."

# 下载依赖
num=1
for dep in $deps; do
    echo "下载第$num个包: $dep, 总共有$total个包"
    apt-get download "$dep" 2>/dev/null || echo "警告: $dep 下载失败"
    num=$((num + 1))
done

# 如果有原始deb文件，也复制过来
# if [ -f "$input" ]; then
#     cp "$input" .
# fi

# sudo dpkg -i *.deb

