#!/bin/bash
# Container Training — Ubuntu 24.04 (Noble) Setup
# Als root oder mit sudo ausführen: sudo bash setup-ubuntu2404.sh

set -e

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

ok()   { echo -e "${GREEN}[OK]${NC} $*"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
fail() { echo -e "${RED}[FEHLER]${NC} $*"; exit 1; }

[ "$(id -u)" -eq 0 ] || fail "Bitte als root oder mit sudo ausführen."

# Ubuntu 24.04 prüfen
if [ -f /etc/os-release ]; then
    . /etc/os-release
    if [ "$ID" != "ubuntu" ] || [ "$VERSION_CODENAME" != "noble" ]; then
        warn "Dieses Script ist für Ubuntu 24.04 (Noble) geschrieben — läuft auf: $PRETTY_NAME"
    fi
fi

echo "================================================"
echo " Container-Schulung — Setup (Ubuntu 24.04)"
echo "================================================"
echo ""

# Trainingsuser ermitteln
TRAINING_USER=${SUDO_USER:-""}
if [ -z "$TRAINING_USER" ]; then
    warn "SUDO_USER nicht gesetzt — Linger wird nicht konfiguriert."
    warn "Ggf. manuell ausführen: loginctl enable-linger <username>"
fi

# -------------------------------------------------------
echo ""
echo "[1/5] Basis-Tools..."
# -------------------------------------------------------
apt-get update -q
apt-get install -y \
    iputils-ping \
    iproute2 \
    net-tools \
    dnsutils \
    curl \
    wget \
    git \
    vim \
    jq \
    bash-completion
ok "Basis-Tools installiert."

# -------------------------------------------------------
echo ""
echo "[2/5] Podman + rootless-Abhängigkeiten..."
# -------------------------------------------------------
# Ubuntu 24.04 liefert Podman >= 4.9 aus dem universe-Repo — kein Fremdrepo nötig
add-apt-repository -y universe
apt-get update -q
apt-get install -y \
    podman \
    slirp4netns \
    fuse-overlayfs \
    uidmap \
    dbus-user-session \
    systemd-container

PODMAN_VER=$(podman --version | awk '{print $3}')
PODMAN_MINOR=$(echo "$PODMAN_VER" | cut -d. -f2)
PODMAN_MAJOR=$(echo "$PODMAN_VER" | cut -d. -f1)

if [ "$PODMAN_MAJOR" -gt 4 ] || { [ "$PODMAN_MAJOR" -eq 4 ] && [ "$PODMAN_MINOR" -ge 4 ]; }; then
    ok "Podman $PODMAN_VER — Quadlets werden unterstützt."
else
    warn "Podman $PODMAN_VER — Quadlets brauchen >= 4.4! Tag 3 könnte Probleme machen."
fi

# -------------------------------------------------------
echo ""
echo "[3/5] Registry-Konfiguration..."
# -------------------------------------------------------
# Drop-in statt Hauptdatei überschreiben — sauber und updatefest
mkdir -p /etc/containers/registries.conf.d
cat > /etc/containers/registries.conf.d/10-unqualified-search.conf << 'EOF'
# Kurzname-Auflösung: docker.io und quay.io werden automatisch durchsucht
unqualified-search-registries = ['docker.io', 'quay.io']
EOF
ok "unqualified-search-registries konfiguriert (docker.io, quay.io)."

# -------------------------------------------------------
echo ""
echo "[4/5] podman-compose + trivy..."
# -------------------------------------------------------
apt-get install -y podman-compose 2>/dev/null \
    || pip3 install --quiet podman-compose
ok "podman-compose installiert."

# trivy
curl -fsSL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh \
    | sh -s -- -b /usr/local/bin latest
ok "trivy installiert: $(trivy --version | head -1)"

# -------------------------------------------------------
echo ""
echo "[5/5] Benutzer-Setup ($TRAINING_USER)..."
# -------------------------------------------------------
if [ -n "$TRAINING_USER" ]; then
    loginctl enable-linger "$TRAINING_USER"
    ok "Linger aktiviert für $TRAINING_USER — systemctl --user überlebt Logout."

    # subuid/subgid für rootless Container
    if ! grep -q "^${TRAINING_USER}:" /etc/subuid 2>/dev/null; then
        usermod --add-subuids 100000-165535 "$TRAINING_USER"
        usermod --add-subgids 100000-165535 "$TRAINING_USER"
        ok "subuid/subgid konfiguriert."
    else
        ok "subuid/subgid bereits vorhanden."
    fi

    # podman socket für den User aktivieren (für podman compose)
    systemctl enable --now podman.socket 2>/dev/null || true
    su - "$TRAINING_USER" -c "systemctl --user enable --now podman.socket" 2>/dev/null || true
    ok "Podman socket aktiviert."
else
    warn "Kein Trainingsuser — Linger, subuid/subgid und socket übersprungen."
fi

# -------------------------------------------------------
echo ""
echo "================================================"
echo " Zusammenfassung"
echo "================================================"
podman --version
podman-compose --version 2>/dev/null | head -1 || true
trivy --version | head -1
echo ""
echo "Registry-Konfiguration:"
cat /etc/containers/registries.conf.d/10-unqualified-search.conf
echo ""

if [ -n "$TRAINING_USER" ]; then
    echo "Benutzer:       $TRAINING_USER"
    echo "Linger:         $(loginctl show-user "$TRAINING_USER" --property=Linger --value 2>/dev/null || echo 'unbekannt')"
fi

echo ""
ok "Setup abgeschlossen. Bitte einmal aus- und wieder einloggen."
