#!/bin/sh
die() { echo >&2 "$@"; exit 1; }

ARGS=$(getopt --options cdmlo --longoptions color,colour,dry-run,debug,logged,mod,old --name `basename $0` -- "$@")
[ $? = 0 ] || die "Syntax: $0 [-c|--color|colour] [-d|--debug|--dry-run] [-l|--logged] [-m|--mod] [-o|--old] <server version>"
set -o errexit
set -o nounset

COLOR=
EVAL=eval
LOGGED=
MOD=
OLD=
FILE=current.log

eval set -- "$ARGS"
while true
do
	case "$1" in
	-c|--color|--colour)
		COLOR=_color; shift ;;
	-l|--logged)
		LOGGED=_logged; shift ;;
	-m|--mod)
		MOD=_mod; shift ;;
	-d|--debug|--dry-run)
		EVAL=echo; shift ;;
	-o|--old)
		OLD=OLD:; FILE=old.log; shift ;;
	--) shift; break ;;
	*) echo "Unhandled option '$1'!"; shift ;;
	esac
done

[ $# -ge 1 ] || die "No server version specified!"
VERSION=$1

# on the alternates use the trunk server as the dev server and always show logged on/off messages
case $(hostname) in gonzo.dicp.de|basilic)
	LOGGED=_logged
	[ $VERSION = dev ] && VERSION=trunk ;;
esac

PARAMS="-n 0 -F"
[ -n "$OLD" ] && PARAMS="-n 0 --pid=\$(cat \"$HOME/servers/$VERSION/old.pid\") -f"

LOG="$HOME/servers/$VERSION/$FILE"
#[ -r "$LOG" ] || die "Server log file '$LOG' is not readable!"

FILTER=logfilter_irc$LOGGED$COLOR

PREV=
case $VERSION in *prev) PREV=PREV: ;; esac

PREFIX=
[ -n "$MOD" ] && PREFIX="$VERSION:" && FILTER=logfilter_irc$MOD
PREFIX="$PREFIX$PREV$OLD"
[ -n "$PREFIX" ] && PREFIX=" | sed --unbuffered \"s/^/$PREFIX &/\""

COMMAND="tail $PARAMS \"$LOG\" | \"$HOME/bin/$FILTER\" --unbuffered$PREFIX"
$EVAL $COMMAND
