#!/bin/sh

set -e

handle() {
	SIGNAL=$(( $? - 128 ))
	echo "Caught signal ${SIGNAL}, stopping gracefully"
	kill -s ${SIGNAL} $(pidof node) 2>/dev/null
}

trap handle INT TERM

refresh() {
	SIGNAL=$(( $? - 128 ))
	echo "Caught signal ${SIGNAL}, refreshing"
	kill -s ${SIGNAL} $(pidof node) 2>/dev/null
}

trap refresh HUP

if ! which -- "${1}"; then
  # first arg is not an executable
  xvfb-run -a --server-args="-screen 0 1024x768x24" -- node /usr/src/app/ "$@" &
	# Wait exits immediately on signals which have traps set. Store return value and wait
	# again for all jobs to actually complete before continuing.
	wait $! || RETVAL=$?
	while [ ${RETVAL} = 129 ] ; do
	  # Refressh signal HUP received. Continue waiting for signals.
	  wait $! || RETVAL=$?
	done
	wait
	exit ${RETVAL}
fi

exec "$@"
