#!/bin/bash

# Docker Engine Installation Script for Ubuntu
# Source: https://docs.docker.com/engine/install/ubuntu/

set -e

echo "=== Docker Engine Installation Script ==="
echo ""

# Check if running as root or with sudo
if [ "$EUID" -ne 0 ]; then
    echo "Please run this script with sudo: sudo ./install-docker.sh"
    exit 1
fi

# Detect the actual user (not root when using sudo)
ACTUAL_USER=${SUDO_USER:-$USER}

# ============================================
# STEP 1: Remove conflicting packages
# ============================================
echo "[1/5] Removing conflicting Docker packages (if any)..."
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
    apt-get remove -y $pkg 2>/dev/null || true
done

# ============================================
# STEP 2: Install prerequisites
# ============================================
echo ""
echo "[2/5] Installing prerequisites..."
apt-get update
apt-get install -y ca-certificates curl

# ============================================
# STEP 3: Add Docker's official GPG key and repository
# ============================================
echo ""
echo "[3/5] Setting up Docker repository..."

# Create directory for keyrings
install -m 0755 -d /etc/apt/keyrings

# Download and add Docker's GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc

# Add Docker repository using deb822 format
tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF

apt-get update

# ============================================
# STEP 4: Install Docker Engine
# ============================================
echo ""
echo "[4/5] Installing Docker Engine..."
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Add user to docker group (for non-root access)
usermod -aG docker "$ACTUAL_USER"

# Start and enable Docker service
systemctl start docker
systemctl enable docker

# ============================================
# STEP 5: Verify installation
# ============================================
echo ""
echo "[5/5] Verifying Docker installation..."
docker --version

# ============================================
# DONE
# ============================================
echo ""
echo "=========================================="
echo "  Docker Installation Complete!"
echo "=========================================="
echo ""
echo "IMPORTANT: Log out and log back in for docker group changes to take effect."
echo "           Or run: newgrp docker"
echo ""
echo "To verify Docker:"
echo "  docker --version"
echo "  docker run hello-world"
echo ""
