#!/usr/bin/env bash
set -euo pipefail

# .NET-Version festlegen (hier 9.0)
DOTNET_VERSION="9.0"

# OS-Informationen ermitteln
if [[ -f /etc/os-release ]]; then
  source /etc/os-release
  DIST_ID="${ID,,}"           # Kleinbuchstaben
  DIST_VERSION_ID="${VERSION_ID:-}"
else
  echo "Konnte /etc/os-release nicht lesen – unbekannte Distribution."
  exit 1
fi

echo "[*] Distribution erkannt: ${DIST_ID} ${DIST_VERSION_ID}"

install_dotnet_runtime() {
  case "$DIST_ID" in
    ubuntu)
      # Ubuntu: Backports-Repository hinzufügen und Runtime installieren
      echo "[*] Füge PPA dotnet/backports hinzu und installiere dotnet-runtime-${DOTNET_VERSION} ..."
      sudo apt-get update -y
      sudo apt-get install -y software-properties-common apt-transport-https
      sudo add-apt-repository -y ppa:dotnet/backports
      sudo apt-get update -y
      sudo apt-get install -y "dotnet-runtime-${DOTNET_VERSION}"
      ;;
    debian)
      # Debian 12 oder neuer: Microsoft-Repository einbinden und Runtime installieren
      echo "[*] Binde Microsoft-Repository ein und installiere dotnet-runtime-${DOTNET_VERSION} ..."
      wget -q "https://packages.microsoft.com/config/debian/${DIST_VERSION_ID}/packages-microsoft-prod.deb" -O packages-microsoft-prod.deb
      sudo dpkg -i packages-microsoft-prod.deb
      rm packages-microsoft-prod.deb
      sudo apt-get update -y
      sudo apt-get install -y "dotnet-runtime-${DOTNET_VERSION}"
      ;;
    fedora)
      # Fedora: Runtime aus Fedora-Repositories installieren
      echo "[*] Installiere dotnet-runtime-${DOTNET_VERSION} über dnf ..."
      sudo dnf install -y "dotnet-runtime-${DOTNET_VERSION}"
      ;;
    rhel|centos|rocky|almalinux)
      # RHEL / CentOS Stream 9: Runtime aus AppStream installieren
      echo "[*] Installiere dotnet-runtime-${DOTNET_VERSION} über dnf/yum ..."
      if command -v dnf >/dev/null 2>&1; then
        sudo dnf install -y "dotnet-runtime-${DOTNET_VERSION}"
      else
        sudo yum install -y "dotnet-runtime-${DOTNET_VERSION}"
      fi
      ;;
    opensuse*|sles)
      # openSUSE Leap oder SLES: Runtime via zypper installieren
      echo "[*] Installiere dotnet-runtime-${DOTNET_VERSION} über zypper ..."
      sudo zypper install -y "dotnet-runtime-${DOTNET_VERSION}"
      ;;
    alpine)
      # Alpine: Runtime via apk installieren
      echo "[*] Installiere dotnet9-runtime über apk ..."
      sudo apk add --update "dotnet${DOTNET_VERSION%%.*}-runtime"
      ;;
    *)
      # Fallback: Verwendung des offiziellen Installationsskripts
      echo "[!] Distribution nicht erkannt oder nicht unterstützt – verwende das offizielle install-script."
      curl -sSL https://dotnet.microsoft.com/download/dotnet/scripts/v1/dotnet-install.sh -o dotnet-install.sh
      chmod +x dotnet-install.sh
      sudo ./dotnet-install.sh --channel "$DOTNET_VERSION" --runtime dotnet --install-dir /usr/share/dotnet
      sudo ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet || true
      rm dotnet-install.sh
      ;;
  esac
}

install_dotnet_runtime

echo "[✓] Installation von .NET ${DOTNET_VERSION} abgeschlossen."
