#!/bin/sh
export LC_ALL=C

# VailuxOS APT-Repository Update Skript (mit main + lts + beta)
# -----------------------------------------------------
REPO_BASE_DIR="/var/www/vailuxos"
DISTRIBUTION="stable"
GPG_KEY_ID="46E52D5EB04C4D00CDF936D9119F74565DF66ABA"
DIST_DIR_REL="dists/$DISTRIBUTION"
PACKAGE_ARCH="amd64"
MAIN_BINARY_DIR_REL="$DIST_DIR_REL/main/binary-$PACKAGE_ARCH"
LTS_BINARY_DIR_REL="$DIST_DIR_REL/lts/binary-$PACKAGE_ARCH"
BETA_BINARY_DIR_REL="$DIST_DIR_REL/beta/binary-$PACKAGE_ARCH"
CONF_FILE="/tmp/apt-ftparchive.conf"

echo "=== VailuxOS Repository-Updater gestartet ==="
echo "Basis-Verzeichnis: $REPO_BASE_DIR"

if [ ! -d "$REPO_BASE_DIR" ]; then
    echo "FATALER FEHLER: REPO_BASE_DIR '$REPO_BASE_DIR' existiert nicht!"
    exit 1
fi

echo "Erstelle fehlende Verzeichnisstruktur..."
mkdir -p "$REPO_BASE_DIR/$MAIN_BINARY_DIR_REL" "$REPO_BASE_DIR/$LTS_BINARY_DIR_REL" "$REPO_BASE_DIR/$BETA_BINARY_DIR_REL" || {
    echo "FATALER FEHLER: Verzeichnisse nicht erstellbar!"
    exit 1
}

cd "$REPO_BASE_DIR" || {
    echo "FATALER FEHLER: cd fehlgeschlagen."
    exit 1
}
echo "In $REPO_BASE_DIR."
echo "---"

echo "1. apt-ftparchive.conf..."
cat > "$CONF_FILE" << EOF
APT::FTPArchive::Release {
    Origin "VailuxOS";
    Label "VailuxOS $DISTRIBUTION";
    Suite "$DISTRIBUTION";
    Codename "$DISTRIBUTION";
    Architectures "$PACKAGE_ARCH";
    Components "main lts beta";
    Description "Offizielles VailuxOS $DISTRIBUTION Repository";
}
EOF

echo "2. Packages-Index generieren..."

for comp in main lts beta; do
    case $comp in
        main) DIR_REL="$MAIN_BINARY_DIR_REL";;
        lts) DIR_REL="$LTS_BINARY_DIR_REL";;
        beta) DIR_REL="$BETA_BINARY_DIR_REL";;
    esac
    PKG_FILE="$DIR_REL/Packages"
    PKG_GZ="$DIR_REL/Packages.gz"

    echo -n "-> $comp: "
    if dpkg-scanpackages "$DIR_REL" /dev/null > "$PKG_FILE" 2>/tmp/scanpkg.log; then
        echo "Packages generiert ($(wc -l < "$PKG_FILE") Pakete)."
    else
        echo "WARNUNG ($(cat /tmp/scanpkg.log))."
    fi
    gzip -9c "$PKG_FILE" > "$PKG_GZ" && echo "-> $comp: Packages.gz OK."
done
rm -f /tmp/scanpkg.log
echo "---"

echo "3. Release-Datei..."
if apt-ftparchive -c "$CONF_FILE" release "$DIST_DIR_REL" > "$DIST_DIR_REL/Release"; then
    echo "-> Release OK."
else
    echo "FATALER FEHLER: Release fehlgeschlagen."
    rm -f "$CONF_FILE"
    exit 1
fi

echo "4. Signieren..."
if gpg --clearsign --digest-algo SHA512 --local-user "$GPG_KEY_ID" \
    --output "$DIST_DIR_REL/InRelease" "$DIST_DIR_REL/Release" &&
   gpg -abs --digest-algo SHA512 --local-user "$GPG_KEY_ID" \
    --output "$DIST_DIR_REL/Release.gpg" "$DIST_DIR_REL/Release"; then
    echo "-> InRelease + Release.gpg OK."
else
    echo "FEHLER: Signierung! (Passwort/GPG prüfen)"
    rm -f "$CONF_FILE"
    exit 1
fi

rm -f "$CONF_FILE"
echo "=== FERTIG! ✅ ==="
