#!/usr/bin/env bash

# This file needs to be run from the git root directory!

# Exit script on the first error
set -o errexit -o nounset

current_hw=$(find . -type d -name 'hw*' | sort | tail -n1)

while IFS= read -r -d '' taskdir; do

  echo ""
  echo "=== Suche bats File in $taskdir"
  for batsfile in $taskdir/tests/*.bats; do
    if [ -e "$batsfile" ]; then
      echo "=== bats File gefunden"
      echo ""
      echo "=== Führe Lösung von Aufgabe in $taskdir aus"
      manifest="$taskdir/Cargo.toml"
      if [ -e "$manifest" ]; then
        echo "=== Cargo-Manifest gefunden in '$manifest' -> Cargo-Modus"
        cargo run --manifest-path "$manifest" || true
      elif [ "$(find "$taskdir" -maxdepth 1 -type f -name '*.rs' | wc -l)" -ne 0 ]; then
        echo "=== Sourcedatei(en) gefunden -> rustc-Modus"
        for srcfile in $taskdir/*.rs; do
          echo "=== Kompiliere '$srcfile'..."
          rustc "$srcfile"
        done
      else
        echo ""
        echo "!!! Falsch konfigurierter Aufgabenordner oder ungelöste Aufgabe"
        echo "!!! Bitte .rs-Dateien in '$taskdir' ablegen"
        echo "!!! Oder ein Cargo-Projekt mit 'cargo init' darin erzeugen"
        echo "!!! Alternativ den Ordner löschen"
        exit 1
      fi
      echo "=== bats File gefunden, teste output"
      bats "$batsfile"
    else
      echo "=== keine output Tests via bats ausgeführt"
    fi
  done

done < <(find "$current_hw" -mindepth 1 -maxdepth 1 -type d -name 'task*' -print0)
