#!/bin/bash

# 备份原始软件源配置文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

# 国内软件源数组
declare -a repo_urls=(
    "http://mirrors.aliyun.com/debian/|阿里云"
    "http://mirrors.163.com/debian/|网易"
    "https://mirrors.cloud.tencent.com/debian/|腾讯"
    "https://mirrors.tuna.tsinghua.edu.cn/debian/|清华大学"
    "https://mirrors.huaweicloud.com/repository/debian/|华为云"
)

# 获取当前Debian系统版本
debian_version=$(awk -F'[= "]' '/VERSION_CODENAME/{print $3}' /etc/os-release)

# 根据系统版本选择对应的软件源
case $debian_version in
    "stretch")
        repo_index=3  # 清华源
        ;;
    "buster")
        repo_index=3  # 清华源
        ;;
    "bullseye")
        repo_index=4  # 华为源
        ;;
    *)
        repo_index=0  # 默认选择阿里云源
        ;;
esac

# 显示可用的软件源列表
echo "国内软件源列表："
for ((i=0; i<${#repo_urls[@]}; i++)); do
    url=$(echo ${repo_urls[$i]} | cut -d '|' -f 1)
    name=$(echo ${repo_urls[$i]} | cut -d '|' -f 2)
    echo "$i. $name ($url)"
done

# 提示用户选择一个源
read -p "请选择要使用的软件源的编号 (默认为 $repo_index): " user_repo_index

# 如果用户选择了有效的编号，则更新 repo_index
if [[ $user_repo_index =~ ^[0-9]+$ ]] && [ $user_repo_index -ge 0 ] && [ $user_repo_index -lt ${#repo_urls[@]} ]; then
    repo_index=$user_repo_index
fi

# 检测源是否正常
repo_url=$(echo ${repo_urls[$repo_index]} | cut -d '|' -f 1)
if ping -c 1 $(echo $repo_url | awk -F/ '{print $3}') &> /dev/null; then
    echo "源 $repo_url 可正常连接。"
else
    echo "源 $repo_url 无法连接，请检查网络连接。"
    # 尝试使用其他源进行更新
    for ((i=0; i<${#repo_urls[@]}; i++)); do
        alt_repo_url=$(echo ${repo_urls[$i]} | cut -d '|' -f 1)
        if ping -c 1 $(echo $alt_repo_url | awk -F/ '{print $3}') &> /dev/null; then
            echo "尝试使用备选源 $alt_repo_url 进行更新。"
            repo_url=$alt_repo_url
            break
        fi
    done
    if [ -z "$repo_url" ]; then
        echo "所有备选源均无法连接，请检查网络连接或稍后再试。"
        exit 1
    fi
fi

# 检查当前使用的源
current_source=$(grep -oP '(?<=^deb\s).+' /etc/apt/sources.list | awk '{print $2}' | cut -d '/' -f 3)
echo "当前使用的源：$current_source"

# 下载并替换为用户选择的软件源配置文件
sudo sed -i "s|http://[^ ]*|${repo_url}|g" /etc/apt/sources.list

# 清除缓存
sudo apt-get clean

# 更新软件包索引
sudo apt-get update

# 升级系统
sudo apt-get upgrade -y

# 清理残余文件
sudo apt-get autoremove -y

echo "软件源已经成功设置并更新完成。"
