#!/usr/bin/env bash
#
# install-docker.sh — Docker Engine installer voor Ubuntu
# Idempotent: veilig om meerdere keren te draaien.
#
# Gebruik:
#   curl -fsSL https://<short-url> | sudo bash
# of:
#   curl -fsSL https://git.hiddenden.cafe/Latte/<repo>/raw/branch/main/install-docker.sh -o install-docker.sh
#   sudo bash install-docker.sh
#
set -euo pipefail

# ── Veiligheidschecks ────────────────────────────────────────────────
if [[ "$(id -u)" -ne 0 ]]; then
  echo "Dit script moet als root draaien. Gebruik: sudo bash $0" >&2
  exit 1
fi

if ! grep -qi ubuntu /etc/os-release; then
  echo "Waarschuwing: dit lijkt geen Ubuntu te zijn. Doorgaan op eigen risico." >&2
fi

# De gebruiker die straks in de docker-groep moet komen.
# Werkt ook via sudo: pakt de oorspronkelijke gebruiker, niet root.
TARGET_USER="${SUDO_USER:-${USER:-root}}"

log() { echo -e "\033[1;36m==>\033[0m $*"; }

# ── Al geïnstalleerd? ────────────────────────────────────────────────
if command -v docker >/dev/null 2>&1; then
  log "Docker is al geïnstalleerd: $(docker --version)"
  log "Niets te doen. Klaar."
  exit 0
fi

# ── Conflicterende pakketten verwijderen ─────────────────────────────
log "Oude/conflicterende pakketten verwijderen (indien aanwezig)"
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
  apt-get remove -y "$pkg" >/dev/null 2>&1 || true
done

# ── Repository + GPG key instellen ───────────────────────────────────
log "Apt voorbereiden en Docker GPG key toevoegen"
apt-get update -qq
apt-get install -y -qq ca-certificates curl

install -m 0755 -d /etc/apt/keyrings
if [[ ! -f /etc/apt/keyrings/docker.asc ]]; then
  curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
  chmod a+r /etc/apt/keyrings/docker.asc
fi

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/ubuntu ${CODENAME} stable" \
  > /etc/apt/sources.list.d/docker.list

# ── Docker installeren ───────────────────────────────────────────────
log "Docker Engine installeren"
apt-get update -qq
apt-get install -y -qq \
  docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# ── Service starten ──────────────────────────────────────────────────
log "Docker service starten en enablen"
systemctl enable --now docker

# ── Gebruiker in docker-groep ────────────────────────────────────────
if [[ "$TARGET_USER" != "root" ]]; then
  log "Gebruiker '${TARGET_USER}' aan docker-groep toevoegen"
  usermod -aG docker "$TARGET_USER"
  echo "    -> Log uit/in (of: newgrp docker) om docker zonder sudo te gebruiken."
fi

# ── Verificatie ──────────────────────────────────────────────────────
log "Versie: $(docker --version)"
log "Klaar. Test met: docker run hello-world"