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

BASE_URL="https://repo.systemctl-schaefer.de/bootstrapper/RRC-Raspberry-Relay-Control"

ZIP="raspberry-relay-control-1.0.0.zip"
ZIP_URL="${BASE_URL}/${ZIP}"

SHA_FILE="raspberry-relay-control-1.0.0.zip.sha256"
SHA_URL="https://repo.systemctl-schaefer.de/bootstrapper/RRC-Raspberry-Relay-Control/raspberry-relay-control-1.0.0.zip.sha256"

PROJECT_DIR="raspberry-relay-control"

echo "== Raspberry Relay Control Bootstrap =="

error_handler() {
    local exit_code=$?
    local line_number=$1

    echo
    echo "FEHLER: Das Skript wurde abgebrochen."
    echo "Betroffene Zeile: ${line_number}"
    echo "Exit-Code: ${exit_code}"
    exit "$exit_code"
}

trap 'error_handler "$LINENO"' ERR

echo "Bitte sudo-Passwort eingeben ..."
sudo -v

# sudo-Berechtigung während der Installation aktiv halten.
while true; do
    sudo -n true || exit
    sleep 60
    kill -0 "$$" 2>/dev/null || exit
done 2>/dev/null &

SUDO_KEEPALIVE=$!

cleanup() {
    kill "$SUDO_KEEPALIVE" 2>/dev/null || true
}

trap cleanup EXIT

echo
echo "Lade Projekt herunter ..."
echo "URL: $ZIP_URL"

if ! wget \
    --https-only \
    --timeout=30 \
    --tries=3 \
    --show-progress \
    --output-document="$ZIP" \
    "$ZIP_URL"
then
    echo
    echo "FEHLER: Die ZIP-Datei konnte nicht heruntergeladen werden."
    rm -f "$ZIP"
    exit 1
fi

if [[ ! -s "$ZIP" ]]; then
    echo "FEHLER: Die heruntergeladene ZIP-Datei ist leer."
    rm -f "$ZIP"
    exit 1
fi

echo
echo "ZIP-Datei wurde heruntergeladen:"
ls -lh "$ZIP"

echo
echo "Lade SHA-256-Prüfsumme herunter ..."
echo "URL: $SHA_URL"

if ! wget \
    --https-only \
    --timeout=30 \
    --tries=3 \
    --show-progress \
    --output-document="$SHA_FILE" \
    "$SHA_URL"
then
    echo
    echo "FEHLER: Die SHA-256-Datei konnte nicht heruntergeladen werden."
    rm -f "$SHA_FILE"
    exit 1
fi

if [[ ! -s "$SHA_FILE" ]]; then
    echo
    echo "FEHLER: Die heruntergeladene SHA-256-Datei ist leer."
    rm -f "$SHA_FILE"
    exit 1
fi

echo
echo "SHA-256-Datei wurde heruntergeladen:"
ls -lh "$SHA_FILE"

echo
echo "Inhalt der Prüfsummendatei:"
cat "$SHA_FILE"
echo

# Windows-Zeilenumbrüche entfernen.
sed -i 's/\r$//' "$SHA_FILE"

# Mögliches UTF-8-BOM am Dateianfang entfernen.
sed -i '1s/^\xEF\xBB\xBF//' "$SHA_FILE"

echo "Prüfe Integrität der ZIP-Datei ..."

if ! sha256sum --check "$SHA_FILE"; then
    echo
    echo "FEHLER: Die SHA-256-Prüfsumme stimmt nicht überein."
    echo "Die ZIP-Datei wird aus Sicherheitsgründen gelöscht."
    rm -f "$ZIP"
    exit 1
fi

echo
echo "Prüfsumme korrekt."

echo
echo "Entpacke Projekt ..."

rm -rf "$PROJECT_DIR"

if ! unzip -o "$ZIP"; then
    echo "FEHLER: Die ZIP-Datei konnte nicht entpackt werden."
    exit 1
fi

if [[ ! -d "$PROJECT_DIR" ]]; then
    echo
    echo "FEHLER: Das erwartete Verzeichnis wurde nicht gefunden:"
    echo "  $PROJECT_DIR"
    echo
    echo "Enthaltene Dateien und Verzeichnisse:"
    find . -maxdepth 2 -mindepth 1 -print
    exit 1
fi

cd "$PROJECT_DIR"

if [[ ! -f "install.sh" ]]; then
    echo "FEHLER: Im Projektverzeichnis wurde keine install.sh gefunden."
    exit 1
fi

chmod +x install.sh

echo
echo "Starte Installation ..."
sudo ./install.sh

echo
echo "Raspberry Relay Control wurde erfolgreich installiert."