#!/bin/bash
set -e
PROGNAME=${0##*/}
MAINCONF=/etc/logcenter/logcenter.conf
FILTER=

function log() {
    if [[ -t 0 ]]; then
        echo "$PROGNAME: ${LEVEL:+$LEVEL: }$*"
    else
        logger -t "$PROGNAME" --id="$$" -s ${LEVEL:+-p "$LEVEL"} -- "$*"
    fi >&2
}
function info() { LEVEL=info log "$@"; }
function fatal() { LEVEL=err log "$@"; exit 1; }

while (( $# > 0 )); do
    case "$1" in
        --) shift; break ;;
        -f) FILTER=$2; shift 2 ;;
        *) break ;;
    esac
done

prog=$(type -P "$1")
[[ -z $prog ]] && fatal "Executable not found: $prog"

declare -A orivars=()
declare var
for var in $(declare -p |sed -nre 's,^declare [^ ]+ ([^=]+)(=.*)?,\1,p'); do
    orivars["$var"]=1
done
source "$MAINCONF"
while read -r flags var; do
    [[ -n ${orivars[$var]} ]] && continue
    [[ -n $FILTER && ! $var =~ $FILTER ]] && continue
    # arrays to comma separated string for convenience
    if [[ $flags == -a* ]]; then
        tmp=$(IFS=,; var+='[*]'; echo "${!var}")
        unset "$var"
        declare "$var=$tmp"
    fi
    export "$var"
done < <(declare -p |sed -nre 's,^declare ([^ ]+) ([^=]+)=.*,\1 \2,p')

exec "$@"
