#!/bin/bash
set -e

export CI_DIR="$(pwd)/$(dirname $0)";

# the number to use as a base for gen ci job indexes
BASE_IDX=100;
# the amount of indexes to increment - the room a script has to put scripts in.
INCREMENT=5;

# our build targets
BUILD_FOR=(
  # Format:
  # distro codename arch
  # The codename must also be a tag on the distro
  "debian bookworm amd64"
  "debian bookworm arm64"
  "debian trixie amd64"
  "debian trixie arm64"
  "debian unstable amd64"
  "debian unstable arm64"
  # "debian unstable riscv64"
)

declare -A DISTRO_IMAGES;
DISTRO_IMAGES['debian']='docker.io/library/debian';
DISTRO_IMAGES['archlinux']='docker.io/library/archlinux';

chmod +w -R $CI_DIR/jobs;
rm -rf $CI_DIR/jobs/*-gen $CI_DIR/jobs/*-generated;

TMPBINDIR="/tmp/ci-temp-bin-$RANDOM/"
mkdir -p "$TMPBINDIR"
export PATH="$PATH:$TMPBINDIR"

mkfn() {
  echo "$2" > "$TMPBINDIR/$1";
  chmod +x "$TMPBINDIR/$1";
}

mkfn mktarget '#!/bin/bash
RELATIVEIDX=$1
JOBNAME="$2"
OURIDX=$(($IDX + $RELATIVEIDX))
JOB="${OURIDX}-${JOBNAME}-${DISTRO}-${CODENAME}-${ARCH}-gen"
cd "$CI_DIR/jobs"
mkdir -p "${JOB}"
echo -n "${JOB}"
'

for TARGET in "${BUILD_FOR[@]}"; do
  export DISTRO=$(awk '{print $1}' <<< "$TARGET");
  export CODENAME=$(awk '{print $2}' <<< "$TARGET");
  export ARCH=$(awk '{print $3}' <<< "$TARGET");
  export OCI_IMAGE="${DISTRO_IMAGES[$DISTRO]}:$CODENAME";
  export DISTRO_TARGET="$CI_DIR/targets/$DISTRO";
  if [[ -d "$DISTRO_TARGET/$CODENAME-$ARCH" ]]; then
    DISTRO_TARGET="$DISTRO_TARGET/$CODENAME-$ARCH";
  elif [[ -d "$DISTRO_TARGET/$CODENAME/$ARCH" ]]; then
    DISTRO_TARGET="$DISTRO_TARGET/$CODENAME/$ARCH";
  elif [[ -d "$DISTRO_TARGET/$ARCH/$CODENAME" ]]; then
    DISTRO_TARGET="$DISTRO_TARGET/$ARCH/$CODENAME";
  elif [[ -d "$DISTRO_TARGET/$ARCH" ]]; then
    DISTRO_TARGET="$DISTRO_TARGET/$ARCH";
  elif [[ -d "$DISTRO_TARGET/$CODENAME" ]]; then
    DISTRO_TARGET="$DISTRO_TARGET/$CODENAME";
  fi;
  export CONTAINERFILE="$DISTRO_TARGET/Containerfile";
  export IDX=$BASE_IDX;
  echo "";
  echo "> Generating scripts for $DISTRO ($CODENAME) on architecture $ARCH";
  echo "| > Base Image: $OCI_IMAGE";
  echo "| > Base Containerfile: $CONTAINERFILE";
  echo "| > Index: $BASE_IDX";
  "$DISTRO_TARGET/setup-job.sh";
  BASE_IDX=$(($BASE_IDX + $INCREMENT));
done;

rm -rf "$TMPBINDIR"
chmod +x -R $CI_DIR/jobs/*-gen
chmod -w -R $CI_DIR/jobs/*-gen
