#!/usr/bin/env bash

set -euo pipefail

export DEBIAN_FRONTEND=noninteractive

echo "[1/8] Removing conflicting packages if they exist..."
sudo apt-get remove -y \
  docker.io docker-compose docker-doc podman-docker containerd runc || true

echo "[2/8] Updating apt index..."
sudo apt-get update

echo "[3/8] Installing prerequisites..."
sudo apt-get install -y \
  ca-certificates \
  curl \
  gnupg

echo "[4/8] Creating keyrings directory..."
sudo install -m 0755 -d /etc/apt/keyrings

echo "[5/8] Installing Docker GPG key..."
if [ ! -f /etc/apt/keyrings/docker.asc ]; then
  sudo curl -fsSL https://download.docker.com/linux/debian/gpg \
    -o /etc/apt/keyrings/docker.asc
fi
sudo chmod a+r /etc/apt/keyrings/docker.asc

echo "[6/8] Adding Docker apt repository..."
ARCH="$(dpkg --print-architecture)"
CODENAME="$(. /etc/os-release && echo "${VERSION_CODENAME}")"

echo \
  "deb [arch=${ARCH} signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian ${CODENAME} stable" \
  | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

echo "[7/8] Installing Docker Engine, Buildx, and Compose plugin..."
sudo apt-get update
sudo apt-get install -y \
  docker-ce \
  docker-ce-cli \
  containerd.io \
  docker-buildx-plugin \
  docker-compose-plugin

echo "[8/8] Enabling and starting Docker..."
sudo systemctl enable docker
sudo systemctl restart docker

echo
echo "=== Versions ==="
docker --version
docker compose version

echo
echo "=== Service status ==="
sudo systemctl --no-pager --full status docker || true

echo
echo "=== Test run ==="
sudo docker run --rm hello-world

TARGET_USER="${1:-$USER}"

echo "Adding user '${TARGET_USER}' to docker group..."
sudo groupadd docker 2>/dev/null || true
sudo usermod -aG docker "${TARGET_USER}"

echo
echo "Done."
echo "Log out and log back in, then verify with:"
echo "  docker ps"