#!/bin/bash

echo
echo "         _       _ _ "
echo "     ___(_) __ _| (_)_ __   __ _ ___ "
echo "    |_  | |/ _' | | | '_ \ / _' / __| "
echo "     / /| | (_| | | | | | | (_| \__ \ "
echo "    /___|_|\__, |_|_|_| |_|\__, |___/ "
echo "           |___/           |___/ "
echo

# Capture terminal escape sequences (ANSI) for formatting
fmt_err=$( tput setaf 1 ) # red foreground
fmt_yay=$( tput setaf 2 ) # green foreground
fmt_off=$( tput sgr0 )    # reset colors/effects

function check_it {
    source_file=$1
    correct_output=$2
    hint=$3

    # Compile/run the source and capture the result and exit value
    cmd="zig run $source_file"
    echo "$ $cmd"
    result=$($cmd 2>&1)
    result_status=$?

    # Echo the result to the screen so user can see what their program does
    echo "$result"
    if [[ $result_status -ne 0 ]]
    then
        echo
        printf "${fmt_err}Uh oh! Looks like there was an error.${fmt_off}\n"
        if [[ ! -z "$hint" ]]
        then
            echo "$hint"
        fi
        echo
        echo "Edit '$source_file' and run me again."
        echo
        exit 1
    fi

    # Wildcards to be lenient with anything AROUND the correct output
    if [[ "$result" == *$correct_output* ]]
    then
        printf "${fmt_yay}** PASSED **${fmt_off}\n"
    else
        printf "${fmt_err}It seems to compile, but I wanted to see '$correct_output'.${fmt_off}\n"
        echo
        exit 1
    fi
}


check_it 01_hello.zig "Hello world" "Note the error: the source file has a hint for fixing 'main'."
check_it 02_std.zig "Standard Library"

echo
echo "    __   __          _ "
echo "    \ \ / __ _ _   _| | "
echo "     \ V / _' | | | | | "
echo "      | | (_| | |_| |_| "
echo "      |_|\__,_|\__, (_) "
echo "               |___/ "
echo
echo "You've completed all of the Ziglings exercises!"
echo
