#!/bin/bash
# Run every platform suite this host can run, and report a summary.
# Windows has no local path: it is covered by CI only.
set -uo pipefail
SCRIPTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
cd "$SCRIPTDIR/.."

OUTDIR=${OUTDIR:-$HOME/testout}
mkdir -p "$OUTDIR"

declare -a NAMES RESULTS
failed=0

run() {
    local name=$1; shift
    echo
    echo "################ $name ################"
    if "$@" 2>&1 | tee "$OUTDIR/km_${name}.txt"; then
        NAMES+=("$name"); RESULTS+=("PASS")
    else
        NAMES+=("$name"); RESULTS+=("FAIL")
        failed=1
    fi
}

run native ./scripts/test_native.sh

if command -v podman >/dev/null 2>&1 || command -v docker >/dev/null 2>&1; then
    run linux ./scripts/test_linux.sh
else
    NAMES+=("linux"); RESULTS+=("SKIP (no container runtime)")
fi

if [ "$(uname -s)" == "Darwin" ] && xcrun simctl help >/dev/null 2>&1; then
    run ios ./scripts/test_ios.sh
else
    NAMES+=("ios"); RESULTS+=("SKIP (no xcode)")
fi

if [ -x "${ANDROID_HOME:-${ANDROID_SDK_ROOT:-$HOME/Library/Android/sdk}}/emulator/emulator" ]; then
    run android ./scripts/test_android.sh
else
    NAMES+=("android"); RESULTS+=("SKIP (no android sdk)")
fi

NAMES+=("windows"); RESULTS+=("SKIP (CI only)")

echo
echo "################ summary ################"
for i in "${!NAMES[@]}"; do
    printf '%-10s %s\n' "${NAMES[$i]}" "${RESULTS[$i]}"
done
echo "logs in $OUTDIR"

exit $failed
