#!/bin/bash

# 定义颜色
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color

echo -e "${GREEN}### 开始自动化安装 Docker 和 Docker Compose Plugin ###${NC}"

# 函数：检查命令是否存在
command_exists() {
  command -v "$1" >/dev/null 2>&1
}

# 检查是否为 Debian 12 (Bookworm)
echo -e "${YELLOW}-> 正在检查操作系统版本...${NC}"
if [ -f /etc/os-release ]; then
    . /etc/os-release
    if [ "$ID" = "debian" ] && [ "$VERSION_CODENAME" = "bookworm" ]; then
        echo -e "${GREEN}   检测到操作系统为 Debian 12 (Bookworm)，继续安装。${NC}"
    else
        echo -e "${RED}   错误：此脚本专为 Debian 12 (Bookworm) 设计。当前系统为 $ID $VERSION_CODENAME。${NC}"
        echo -e "${RED}   脚本退出。${NC}"
        exit 1
    fi
else
    echo -e "${RED}   错误：无法检测操作系统版本。此脚本可能不适用。${NC}"
    echo -e "${RED}   脚本退出。${NC}"
    exit 1
fi

# 步骤 1: 安装必要的依赖
echo -e "${YELLOW}-> 正在安装必要的系统依赖...${NC}"
sudo apt update -y
sudo apt install -y ca-certificates curl gnupg lsb-release

# 步骤 2: 判断并安装 Docker Engine
echo -e "${YELLOW}-> 正在检查 Docker Engine 是否已安装...${NC}"
if command_exists docker; then
    echo -e "${GREEN}   Docker Engine 已安装。${NC}"
else
    echo -e "${YELLOW}   Docker Engine 未安装，开始安装...${NC}"

    # 移除旧的 Docker GPG 密钥和源 (如果有的话)
    sudo rm -f /etc/apt/keyrings/docker.gpg
    sudo rm -f /etc/apt/sources.list.d/docker.list

    # 添加 Docker 官方 GPG 密钥
    echo -e "${YELLOW}   正在添加 Docker 官方 GPG 密钥...${NC}"
    sudo install -m 0755 -d /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    if [ $? -ne 0 ]; then
        echo -e "${RED}   错误：添加 Docker GPG 密钥失败。请检查网络或权限。${NC}"
        exit 1
    fi

    # 添加 Docker CE 仓库源到 apt 源列表 (清华源)
    echo -e "${YELLOW}   正在添加 Docker CE 清华镜像源...${NC}"
    echo \
      "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian \
      "$(lsb_release -cs)" stable" | \
      sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    if [ $? -ne 0 ]; then
        echo -e "${RED}   错误：添加 Docker CE 镜像源失败。${NC}"
        exit 1
    fi

    # 更新 apt 包索引
    echo -e "${YELLOW}   正在更新 apt 包索引...${NC}"
    sudo apt update -y

    # 安装 Docker Engine (包括 containerd 和 Docker CLI)
    echo -e "${YELLOW}   正在安装 Docker Engine...${NC}"
    sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin
    if [ $? -ne 0 ]; then
        echo -e "${RED}   错误：安装 Docker Engine 失败。${NC}"
        exit 1
    fi

    # 启动 Docker 服务并设置开机自启
    echo -e "${YELLOW}   正在启动 Docker 服务并设置开机自启...${NC}"
    sudo systemctl start docker
    sudo systemctl enable docker
    echo -e "${GREEN}   Docker Engine 安装并启动成功！${NC}"

    # 将当前用户添加到 docker 组，以便无需 sudo 运行 docker 命令
    echo -e "${YELLOW}   将当前用户添加到 'docker' 组...${NC}"
    sudo usermod -aG docker "$USER"
    echo -e "${YELLOW}   请注意：要使此更改生效，你可能需要注销并重新登录。${NC}"
fi

# 步骤 3: 确保 Docker APT 源为清华源 (即使 Docker 已安装，也更新源)
echo -e "${YELLOW}-> 正在确保 Docker APT 源为清华镜像源...${NC}"
# 移除旧的 Docker 源 (如果有的话)
sudo rm -f /etc/apt/sources.list.d/docker.list

# 添加 Docker CE 仓库源到 apt 源列表 (清华源)
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian \
  "$(lsb_release -cs)" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
if [ $? -ne 0 ]; then
    echo -e "${RED}   错误：替换 Docker 源为清华镜像源失败。${NC}"
    exit 1
fi
echo -e "${GREEN}   Docker APT 源已设置为清华镜像源。${NC}"

# 重新更新 apt 包索引，确保新的源被识别
echo -e "${YELLOW}-> 正在更新 apt 包索引以识别新的源...${NC}"
sudo apt update -y
if [ $? -ne 0 ]; then
    echo -e "${RED}   错误：更新 apt 索引失败。${NC}"
    exit 1
fi


# 步骤 4: 安装 Docker Compose Plugin
echo -e "${YELLOW}-> 正在检查 Docker Compose Plugin 是否已安装...${NC}"
if command_exists docker && docker compose version >/dev/null 2>&1; then
    echo -e "${GREEN}   Docker Compose Plugin 已安装。${NC}"
else
    echo -e "${YELLOW}   Docker Compose Plugin 未安装，开始安装...${NC}"
    sudo apt install -y docker-compose-plugin
    if [ $? -ne 0 ]; then
        echo -e "${RED}   错误：安装 Docker Compose Plugin 失败。${NC}"
        exit 1
    fi
    echo -e "${GREEN}   Docker Compose Plugin 安装成功！${NC}"
fi

# 步骤 5: 验证安装
echo -e "${YELLOW}-> 正在验证 Docker 和 Docker Compose Plugin 安装...${NC}"
if docker version >/dev/null 2>&1; then
    echo -e "${GREEN}   Docker Engine 版本信息：${NC}"
    docker version | head -n 2
else
    echo -e "${RED}   Docker Engine 未正确安装。${NC}"
fi

if docker compose version >/dev/null 2>&1; then
    echo -e "${GREEN}   Docker Compose Plugin 版本信息：${NC}"
    docker compose version
else
    echo -e "${RED}   Docker Compose Plugin 未正确安装。${NC}"
fi

echo -e "${GREEN}### Docker 和 Docker Compose Plugin 安装过程完成！###${NC}"
echo -e "${YELLOW}记住：如果 Docker Engine 是新安装的，你可能需要注销并重新登录以使 'docker' 命令无需 sudo 即可执行。${NC}"
