#!/bin/bash
SAVEIMAGES=""
COMPAREIMAGES=""
ARGS=""
RED='\e[0;31m'
GREEN='\e[0;32m'
NOCOLOR='\e[0m'
RETVAL=0

# run all of the samples
# parse the arguments
while test $# -gt 0; do
        case "$1" in
        --save-images)
                SAVEIMAGES="true"
		ARGS="--save-images $ARGS"
                ;;
        --compare-images)
                COMPAREIMAGES="true"
		ARGS="--save-images $ARGS"
                ;;
        -)
                echo "error: unknown option"
                usage
                ;;
        esac
        shift
done

if ! test -z $COMPAREIMAGES; then
    if ! test -d 'golden'; then
        { echo >&2 "I require golden images but no golden directory.  Aborting."; exit 1; }
    fi
    type compare >/dev/null 2>&1 || { echo >&2 "I require ImageMagick compare but it's not installed.  Aborting."; exit 1; }
fi

#  save command directory; note that this file is a link to file of same
# name in samples/src/
CMDDIR="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")"

# get the list of built samples to run
SAMP2RUN=`find "$CMDDIR" -name *.cpp -not -path "*util*" -not -path "*android*" -not -path "*CMakeFiles*" | sort`
#echo "SAMP2RUN is $SAMP2RUN"

# display short description of the sample and run it
IFS=$(echo -en "\n\b")
for f in $SAMP2RUN
do
   # get short description of the sample source file
   DESCRIPT=`"$CMDDIR/get-short-descripts.sh" --nofname --sampfname "$f"`
   BNAME=$(basename $f)
   echo "RUNNING SAMPLE:  $BNAME"
   echo "  ** $DESCRIPT"

   # run the built sample; need to remove .cpp from name
   RNAME=./${BNAME%.cpp}
   $RNAME $ARGS
   rv=$?
   echo ""
   if [ $rv -ne 0 ]; then
        >&2 echo -e "${RED}${RNAME} FAIL${NOCOLOR} : Return Value $rv"
	    RETVAL=1
   elif ! test -z $COMPAREIMAGES; then
        GOLDNAME="golden/${RNAME}.ppm"
        if test -f $GOLDNAME; then
           THISNAME="${RNAME}.ppm"
	       CMDRES=`compare -metric AE -fuzz 3% $THISNAME $GOLDNAME ${RNAME}-diff.ppm 2>&1`
           if [ $CMDRES == "0" ]; then
               >&2 echo -e "${GREEN}${RNAME} PASS${NOCOLOR}"
           else
               >&2 echo -e "${RED}${RNAME} FAIL${NOCOLOR} : pixel error count is ${CMDRES}"
               SAVEIMAGES="true"
	           RETVAL=1
           fi
        else
            if test -f ${RNAME}.ppm; then
                >&2 echo -e "${RED}${RNAME} FAIL${NOCOLOR} : Missing Golden Image"
                RETVAL=1
            fi
        fi
    fi
    if test -z $SAVEIMAGES; then
        rm ${RNAME}.ppm > /dev/null 2>&1
	    rm ${RNAME}-diff.ppm > /dev/null 2>&1
    fi
done
exit $RETVAL
