#!/bin/bash

# build.sh - Ein Skript zur Automatisierung des Build- und Installationsprozesses für Nolambocoin Miner

# Funktionen zur Anzeige von Nachrichten
function echo_info {
    echo -e "\e[34m[INFO]\e[0m $1"
}

function echo_success {
    echo -e "\e[32m[SUCCESS]\e[0m $1"
}

function echo_error {
    echo -e "\e[31m[ERROR]\e[0m $1"
}

# Überprüfen der Abhängigkeiten
function check_dependencies {
    echo_info "Überprüfe erforderliche Abhängigkeiten..."

    local dependencies=("autoconf" "automake" "libcurl4-openssl-dev" "libjansson-dev" "build-essential" "pkg-config")

    for dep in "${dependencies[@]}"; do
        if ! dpkg -s "$dep" &> /dev/null; then
            echo_error "Abhängigkeit fehlt: $dep"
            echo_info "Bitte installieren Sie fehlende Abhängigkeiten mit folgendem Befehl:"
            echo_info "sudo apt-get install ${dependencies[@]}"
            exit 1
        fi
    done

    echo_success "Alle erforderlichen Abhängigkeiten sind installiert."
}

# Initialisieren der Autotools
function initialize_autotools {
    echo_info "Initialisiere Autotools..."

    if ! autoreconf -i; then
        echo_error "Fehler beim Ausführen von autoreconf."
        exit 1
    fi

    echo_success "Autotools erfolgreich initialisiert."
}

# Konfigurieren des Projekts
function configure_project {
    echo_info "Konfiguriere das Projekt..."

    if ! ./configure; then
        echo_error "Fehler beim Ausführen von ./configure."
        exit 1
    fi

    echo_success "Projekt erfolgreich konfiguriert."
}

# Kompilieren des Projekts
function compile_project {
    echo_info "Kompiliere das Projekt..."

    if ! make -j$(nproc); then
        echo_error "Fehler beim Ausführen von make."
        exit 1
    fi

    echo_success "Projekt erfolgreich kompiliert."
}

# Installieren des Projekts
function install_project {
    echo_info "Installiere das Projekt..."

    if [ "$EUID" -ne 0 ]; then
        echo_error "Installation erfordert Root-Rechte. Bitte führen Sie das Skript mit sudo aus."
        exit 1
    fi

    if ! make install; then
        echo_error "Fehler beim Ausführen von make install."
        exit 1
    fi

    echo_success "Projekt erfolgreich installiert."
}

# Bereinigung des Build-Verzeichnisses
function clean_project {
    echo_info "Bereinige das Projekt..."

    if ! make clean; then
        echo_error "Fehler beim Ausführen von make clean."
        exit 1
    fi

    echo_success "Projekt erfolgreich bereinigt."
}

# Anzeige der Nutzung des Skripts
function show_help {
    echo "Usage: ./build.sh [options]"
    echo ""
    echo "Options:"
    echo "  --build        Konfiguriert und kompiliert das Projekt."
    echo "  --install      Installiert das Projekt nach dem Kompilieren."
    echo "  --clean        Bereinigt die Build-Dateien."
    echo "  --help         Zeigt diese Hilfe an."
    echo ""
    echo "Beispiele:"
    echo "  ./build.sh --build"
    echo "  sudo ./build.sh --install"
    echo "  ./build.sh --clean"
    exit 0
}

# Hauptfunktion zur Verarbeitung der Skript-Argumente
function main {
    if [ $# -eq 0 ]; then
        show_help
    fi

    for arg in "$@"; do
        case $arg in
            --build)
                check_dependencies
                initialize_autotools
                configure_project
                compile_project
                ;;
            --install)
                install_project
                ;;
            --clean)
                clean_project
                ;;
            --help)
                show_help
                ;;
            *)
                echo_error "Unbekannte Option: $arg"
                show_help
                ;;
        esac
    done
}

# Aufruf der Hauptfunktion mit allen übergebenen Argumenten
main "$@"
