#!/bin/bash

RED="\033[31m"
GREEN="\033[32m"
YELLOW="\033[33m"
NORMAL="\033[0;39m"

OK=0
DIFF=0
root=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)
mkdir -p "$root/output-eyeprolog"

engine=${EYEPROLOG:-eyeprolog}
engine_bin=$(command -v -- "$engine" 2>/dev/null)
if [[ -z "$engine_bin" ]]; then
    echo "cannot find EyeProlog executable: $engine" >&2
    exit 127
fi
engine_bin=$(realpath "$engine_bin" 2>/dev/null || readlink -f "$engine_bin")
engine_root=$(cd -- "$(dirname -- "$engine_bin")/.." && pwd)
eyeprolog_version=$(sed -nE 's/^[[:space:]]*"version"[[:space:]]*:[[:space:]]*"([^"]+)".*/\1/p' "$engine_root/package.json" | head -1)
[[ -n "$eyeprolog_version" ]] || eyeprolog_version="unknown"

echo -e "${YELLOW}-------------------------------------------------${NORMAL}"
echo -e "${YELLOW}running the eyelet examples and test cases${NORMAL}"
echo -e "${YELLOW}using eyelet with eyeprolog ${eyeprolog_version}${NORMAL}"
echo -e "${YELLOW}-------------------------------------------------${NORMAL}"
echo ""

pad () {
    [ "$#" -gt 1 ]
    [ -n "$2" ]
    printf "%$2.${2#-}s" "$1"
}

files=("$root"/input/*.pl)
begin=$(date +%s)
while IFS=$'\t' read -r f elapsed status
do
    echo -en "$(pad "${f}" -36)"
    echo -en "${YELLOW}$(pad "$(printf "%.0f" "${elapsed}") ms" 10)${NORMAL} "

    if [[ $status -le 2 ]] && git diff --quiet -- "output-eyeprolog/${f}"; then
        match=1
    else
        match=0
    fi
    if [[ $match -eq 1 ]]; then
        echo -e "${GREEN}OK${NORMAL}"
        ((OK++))
    else
        echo -e "${RED}DIFF${NORMAL}"
        ((DIFF++))
    fi
done < <(
    node "$root/test-eyeprolog-worker.mjs" \
        "$engine_root" \
        "$root/output-eyeprolog" \
        "${files[@]}"
)
end=$(date +%s)
echo ""

echo -e "${YELLOW}$((end - begin)) s${NORMAL} ${GREEN}${OK} OK${NORMAL} ${RED}${DIFF} DIFF${NORMAL}"
if [[ ${DIFF} -eq 0 ]]; then
    exit 0
else
    exit 2
fi
