#!/bin/bash

# GCC 15 Installation für Ubuntu 22.04
# Verwendet verschiedene Quellen um GCC 15 zu bekommen

set -euo pipefail

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

log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }

log_info "Installiere GCC 15 für Ubuntu 22.04..."

# Option 1: Ubuntu Toolchain PPA (manchmal verfügbar)
log_info "Versuche Ubuntu Toolchain PPA..."
apt update
apt install -y software-properties-common

# Füge verschiedene PPAs hinzu
add-apt-repository -y ppa:ubuntu-toolchain-r/test 2>/dev/null || log_warning "PPA bereits hinzugefügt oder nicht verfügbar"
add-apt-repository -y ppa:ubuntu-toolchain-r/ppa 2>/dev/null || log_warning "PPA bereits hinzugefügt oder nicht verfügbar"

apt update

# Versuche GCC 15 zu installieren
if apt install -y gcc-15 g++-15 2>/dev/null; then
    log_success "GCC 15 erfolgreich über PPA installiert"
    GCC15_AVAILABLE=true
else
    log_warning "GCC 15 nicht über PPA verfügbar"
    GCC15_AVAILABLE=false
fi

# Option 2: Snap (falls PPA nicht funktioniert)
if [ "$GCC15_AVAILABLE" = false ]; then
    log_info "Versuche GCC 15 über Snap..."
    if command -v snap &> /dev/null; then
        if snap install gcc --classic 2>/dev/null; then
            log_success "GCC über Snap installiert"
            # Prüfe Version
            SNAP_GCC_VERSION=$(snap run gcc --version | head -1)
            log_info "Snap GCC Version: $SNAP_GCC_VERSION"
        else
            log_warning "GCC über Snap nicht verfügbar"
        fi
    else
        log_info "Snap nicht installiert, installiere es..."
        apt install -y snapd
        if snap install gcc --classic 2>/dev/null; then
            log_success "GCC über Snap installiert"
        else
            log_warning "GCC über Snap nicht verfügbar"
        fi
    fi
fi

# Option 3: Compile from Source (letzte Option)
if [ "$GCC15_AVAILABLE" = false ]; then
    log_info "GCC 15 nicht verfügbar. Verwende GCC 11 (Standard für Ubuntu 22.04)"
    apt install -y gcc g++
    
    log_info "Verfügbare Compiler:"
    gcc --version | head -1
    g++ --version | head -1
    
    log_warning "Der Code verwendet nur C++17 Features, daher ist GCC 11 ausreichend"
    log_info "Falls Sie trotzdem GCC 15 brauchen, können Sie es aus dem Quellcode kompilieren"
fi

# Setze GCC 15 als Standard (falls verfügbar)
if [ "$GCC15_AVAILABLE" = true ]; then
    log_info "Setze GCC 15 als Standard..."
    update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-15 100
    update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-15 100
    
    log_success "GCC 15 ist jetzt der Standard-Compiler"
    gcc --version | head -1
    g++ --version | head -1
fi

log_success "Compiler-Installation abgeschlossen!"
