#!/usr/bin/env bash

# This script checks your solution against our reference solution.
cd "$(dirname "$0")" || exit 1

# Make commands fail if any component of the pipe fails
set -o pipefail

indent4() {
  sed -e 's/^/    /'
}
indent8() {
  sed -e 's/^/        /'
}

# Helper colors
cnone="$(echo -ne '\033[0m')"
cwhiteb="$(echo -ne '\033[1;37m')"
cred="$(echo -ne '\033[0;31m')"
cgreen="$(echo -ne '\033[0;32m')"

# Detects whether we can add colors or not
# http://stackoverflow.com/a/911213
in_white() {
  [ -t 1 ] && echo -n "$cwhiteb"
  cat -
  [ -t 1 ] && echo -n "$cnone"
}
in_red() {
  [ -t 1 ] && echo -n "$cred"
  cat -
  [ -t 1 ] && echo -n "$cnone"
}
in_green() {
  [ -t 1 ] && echo -n "$cgreen"
  cat -
  [ -t 1 ] && echo -n "$cnone"
}

scores=""

tests_passed=0
tests_failed=0
function check_solution {
  local test_name=$1
  local theirs="../$test_name.txt"
  local ours="tests/$test_name.txt"

  echo "Checking $test_name..." | in_white

  if cmp "$theirs" "$ours" | indent4; then
    echo "    correct." | in_green
    ((++tests_passed))
    scores=$scores"\"$test_name\": 1"
  else
    echo "    test failed. Detailed output is above." | in_red
    ((++tests_failed))
    scores=$scores"\"$test_name\": 0"
  fi
}

echo
check_solution comment-all-the-lines
scores="$scores, "
echo
check_solution reformat
scores="$scores, "
echo
check_solution scoreboard
scores="$scores, "
echo
check_solution wizard-of-oz

echo
echo "Finished."
echo "Tests passed: $tests_passed"
echo "Tests failed: $tests_failed"
echo "Tests total:" $((tests_failed + tests_passed))
echo
echo "{\"scores\": {$scores}}"
