#!/usr/bin/env bash
# Installationsskript für Docker in einer VM
# - Nutzt automatisch den Benutzer, der das Skript mit sudo ausführt
# - Fügt diesen Benutzer der sudo- und docker-Gruppe hinzu
# - Installiert Docker Engine und das Compose-Plugin ("docker compose")
# Verwendung: als root mit sudo ausführen: sudo bash start.sh

set -euo pipefail
IFS=$'\n\t'

if [[ $(id -u) -ne 0 ]]; then
  echo "Dieses Skript muss mit sudo/root ausgeführt werden." >&2
  exit 1
fi

USERNAME=${SUDO_USER:-}

if [[ -z "$USERNAME" ]]; then
  echo "Konnte keinen Benutzer aus SUDO_USER ermitteln. Bitte mit 'sudo' ausführen." >&2
  exit 1
fi

if ! id "$USERNAME" &>/dev/null; then
  echo "Benutzer $USERNAME existiert nicht." >&2
  exit 1
fi

echo "Füge $USERNAME zur sudo- und docker-Gruppe hinzu..."
usermod -aG sudo "$USERNAME"
groupadd -f docker
usermod -aG docker "$USERNAME"

# Installiere Abhängigkeiten
echo "Installiere notwendige Pakete..."
apt-get update -y
apt-get install -y ca-certificates curl gnupg lsb-release

# Docker GPG-Key und Repo hinzufügen
echo "Füge Docker GPG-Key und Repository hinzu..."
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release && echo "$ID")/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg

ARCH=$(dpkg --print-architecture)
OS_CODENAME=$( . /etc/os-release && echo "$VERSION_CODENAME" )
if [[ -z "$OS_CODENAME" ]]; then
  OS_CODENAME=$(lsb_release -cs 2>/dev/null || echo "stable")
fi

echo "deb [arch=$ARCH signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/$(. /etc/os-release && echo "$ID") $OS_CODENAME stable" \
  > /etc/apt/sources.list.d/docker.list

# Docker installieren
echo "Installiere Docker Engine, CLI, containerd und Compose-Plugin..."
apt-get update -y
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Docker daemon aktivieren
systemctl enable docker --now

# Entferne ggf. altes docker-compose
echo "Prüfe altes 'docker-compose'..."
if command -v docker-compose &>/dev/null; then
  echo "Entferne altes 'docker-compose' (mit Bindestrich)..."
  apt-get remove -y docker-compose || true
  if [[ -x /usr/local/bin/docker-compose ]]; then
    echo "Hinweis: /usr/local/bin/docker-compose existiert. Manuelles Entfernen empfohlen."
  fi
fi

# Test
echo "Starte kurzen Docker-Test: hello-world ..."
if docker info &>/dev/null; then
  docker run --rm hello-world || true
else
  echo "Docker läuft nicht korrekt. Bitte 'systemctl status docker' prüfen." >&2
fi

echo "\nFertig. Zusammenfassung:"
echo "- Benutzer: $USERNAME"
echo "- Gruppen: $(id -nG $USERNAME)"
echo "- Docker + Compose installiert. Nutzung mit 'docker compose' möglich."
echo "- Nach neuem Login sind Gruppenänderungen aktiv."
