#!/usr/bin/env bash

set -euo pipefail

BASE="/home/repofiveium/public_html"
RPMBUILD="$BASE/rpmbuild"
RPMROOT="$BASE/rpm"
TMPROOT="$BASE/.repo_tmp"
GPG_KEY="AC2AE6ABD432F5BC2A8E96F7649D1373E2C6882B"

# Supported targets (based on your system)
TARGETS=(
  "alma+epel-8-x86_64"
  "alma+epel-9-x86_64"
  "alma+epel-10-x86_64"
)

log() { echo -e "\033[1;36m$1\033[0m"; }
err() { echo -e "\033[1;31m$1\033[0m"; }

trap 'err "❌ Failed at line $LINENO"; exit 1' ERR

log "🚀 Fiveium Multi-OS Build Started"

# ===== Fix line endings =====
log "🔧 Fixing files..."
find "$RPMBUILD" -type f -exec dos2unix {} + >/dev/null 2>&1 || true

# ===== Clean old builds =====
log "🧹 Cleaning old builds..."
rm -rf "$RPMBUILD/RPMS/"* "$RPMBUILD/SRPMS/"* || true

# ===== Build SRPMs =====
log "📦 Building SRPMs..."
for spec in "$RPMBUILD/SPECS/"*.spec; do
    [ -f "$spec" ] || continue
    log "➡️  Building SRPM: $(basename "$spec")"
    rpmbuild -bs "$spec" --define "_topdir $RPMBUILD"
done

# ===== Prepare temp repo =====
log "📁 Preparing temp repo..."
rm -rf "$TMPROOT"
mkdir -p "$TMPROOT"

# ===== Build for each SRPM + each OS =====
for SRPM in "$RPMBUILD/SRPMS/"*.src.rpm; do
    log "📦 Processing $(basename "$SRPM")"

    for target in "${TARGETS[@]}"; do

        if [ ! -f "/etc/mock/$target.cfg" ]; then
            log "⚠️ Skipping missing target: $target"
            continue
        fi

        log "🏗️ Building for $target"

        mock -r "$target" rebuild "$SRPM"

        RESULT_DIR="/var/lib/mock/$target/result"
        ELVER=$(echo "$target" | grep -oE '[0-9]+' | head -1)

        DEST="$TMPROOT/el$ELVER"
        mkdir -p "$DEST"

        cp -f "$RESULT_DIR"/*.rpm "$DEST/" || true
    done
done

# ===== Sign + Create repo per OS =====
for dir in "$TMPROOT"/el*; do
    [ -d "$dir" ] || continue

    log "🔐 Signing RPMs in $(basename "$dir")"

    rpm --delsign "$dir"/*.rpm >/dev/null 2>&1 || true

    rpmsign \
      --define "_gpg_name $GPG_KEY" \
      --addsign "$dir"/*.rpm || true

    log "📦 Creating repo metadata for $(basename "$dir")"

    rm -rf "$dir/repodata"

    createrepo_c \
      --compress-type=gz \
      --general-compress-type=gz \
      --simple-md-filenames \
      "$dir"

    log "🔐 Signing repomd.xml"

    gpg --yes --detach-sign --armor "$dir/repodata/repomd.xml"
done

# ===== Atomic deploy =====
log "🚚 Deploying repo..."

rm -rf "$RPMROOT.old" || true
mv "$RPMROOT" "$RPMROOT.old" 2>/dev/null || true
mv "$TMPROOT" "$RPMROOT"

# ===== Fix ownership =====
chown -R repofiveium:repofiveium "$RPMROOT"

log "✅ Build Complete!"