#! /bin/sh

# First argument is seconds between running everything
period=${1:-60}

BIN=${CTF_BASE:-/opt/mcp}/bin
WWW=${CTF_BASE:-/var}/www
STATE=${CTF_BASE:-/var/lib/ctf}

NEWPOINTS=$STATE/points.new
POINTS=$STATE/points.log
SCOREBOARD=$WWW/scoreboard.html

if ! [ -f $SCOREBOARD ]; then
    $BIN/scoreboard < $POINTS > $SCOREBOARD
fi

while true; do
    start=$(date +%s)
    next=$(expr $start + $period)

    # Collect any new points
    for fn in $NEWPOINTS/*; do
        [ -f $fn ] || continue
        cat $fn >> $POINTS || break
        rm $fn
    done

    # Render scoreboard
    if [ $POINTS -nt $SCOREBOARD ]; then
        $BIN/scoreboard < $POINTS > $SCOREBOARD.new && mv $SCOREBOARD.new $SCOREBOARD
    fi

    now=$(date +%s)
    if [ $now -lt $next ]; then
        sleep $(expr $next - $now)
    fi
done