#!/usr/bin/env bash
#===============================================================================
# Docker 快速安装脚本 — CentOS Stream 9/10
# 用法: bash install-docker.sh [--mirror] [--version 29.5.2]
#===============================================================================
set -euo pipefail

# ---- 颜色 ----
RED='\033[31m'; GREEN='\033[32m'; YELLOW='\033[33m'; BLUE='\033[34m'; NC='\033[0m'
info()  { echo -e "${GREEN}[✓]${NC} $*"; }
warn()  { echo -e "${YELLOW}[!]${NC} $*"; }
error() { echo -e "${RED}[✗]${NC} $*"; exit 1; }
step()  { echo -e "\n${BLUE}▶${NC} $*"; }

# ---- 参数 ----
USE_MIRROR=false
TARGET_VERSION=""
while [[ $# -gt 0 ]]; do
    case "$1" in
        --mirror) USE_MIRROR=true; shift ;;
        --version) TARGET_VERSION="$2"; shift 2 ;;
        *) error "未知参数: $1" ;;
    esac
done

# ---- 权限检查 ----
[[ $EUID -eq 0 ]] || error "请使用 root 执行: sudo bash $0"

# ---- 系统检查 ----
step "检查系统环境"
grep -qi 'centos' /etc/os-release || warn "当前非 CentOS 系统，脚本仅适配 CentOS Stream 9/10"
info "内核: $(uname -r)  架构: $(uname -m)"

# ---- 卸载旧版本 ----
step "卸载旧版本 Docker"
dnf remove -y docker docker-client docker-client-latest docker-common \
    docker-latest docker-latest-logrotate docker-logrotate docker-engine \
    podman-docker 2>/dev/null || true
info "旧版本清理完成"

# ---- 配置仓库 ----
step "配置 Docker 仓库"
dnf install -y dnf-plugins-core

if $USE_MIRROR; then
    REPO_URL="https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo"
    info "使用阿里云镜像仓库"
else
    REPO_URL="https://download.docker.com/linux/centos/docker-ce.repo"
    info "使用 Docker 官方仓库"
fi
dnf config-manager --add-repo "$REPO_URL"

# ---- 安装 Docker ----
if [[ -n "$TARGET_VERSION" ]]; then
    step "安装 Docker CE ${TARGET_VERSION} (指定版本)"
    VERSION_PREFIX="3:${TARGET_VERSION}"
    dnf list docker-ce --showduplicates | grep "$TARGET_VERSION" \
        || warn "未找到版本 ${TARGET_VERSION}，将安装最新版"
    dnf install -y \
        "docker-ce-${VERSION_PREFIX}"* \
        "docker-ce-cli-${VERSION_PREFIX}"* \
        containerd.io docker-buildx-plugin docker-compose-plugin \
        || error "安装失败，请检查版本号: dnf list docker-ce --showduplicates | sort -r"
else
    step "安装 Docker CE (最新稳定版)"
    dnf install -y docker-ce docker-ce-cli containerd.io \
        docker-buildx-plugin docker-compose-plugin
fi
info "Docker 安装完成: $(docker --version 2>/dev/null || echo '待启动')"

# ---- 配置 daemon.json ----
step "配置 daemon.json (生产环境推荐)"
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<'EOF'
{
  "data-root": "/data/docker",
  "exec-opts": ["native.cgroupdriver=systemd"],
  "storage-driver": "overlay2",
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "200m",
    "max-file": "3"
  },
  "registry-mirrors": [
    "https://docker.1ms.run",
    "https://docker.xuanyuan.me",
    "https://docker.m.daocloud.io"
  ],
  "live-restore": true,
  "iptables": true,
  "ip-forward": true,
  "ip-masq": true
}
EOF
info "配置已写入 /etc/docker/daemon.json"

# ---- 创建数据目录 & 启动 ----
step "启动 Docker"
mkdir -p /data/docker
systemctl daemon-reload
systemctl enable --now docker
info "Docker 已启动，状态: $(systemctl is-active docker)"

# ---- 验证 ----
step "验证安装"
docker version --format 'Client: {{.Client.Version}}  |  Server: {{.Server.Version}}  |  API: {{.Client.APIVersion}}'
echo ""
docker info --format '
 存储驱动: {{.Driver}}
 数据目录: {{.DockerRootDir}}
 Cgroup驱动: {{.CgroupDriver}}
 镜像加速: {{range .RegistryConfig.Mirrors}}{{.}} {{end}}' 2>/dev/null || true

echo ""
info "可执行以下命令测试:  docker run --rm hello-world"
info "安装完成! 🌼"
