#!/usr/bin/env bash

set -u
set -e

: ${BOT_DIR?nicht gesetzt!}
: ${BOT_ARGS=}

REMOTE_HOST=${REMOTE_HOST:-gemforest.servegame.com}


function build_query
{
    local -A params

    while getopts "ns:Sx:" opt; do
      case $opt in
        n) params[nolist]=1 ;;
        s) params[seed]="$OPTARG" ;;
        S) params[randseed]=1 ;;
        x) params[xtra]="$OPTARG" ;;
      esac
    done

    shift $((OPTIND - 1))
    if [[ $# -eq 1 ]]; then
        echo "sid=$1"
        return
    fi
    # build query string
    local query=""
    local k v
    for k in "${!params[@]}"; do
      v="${params[$k]}"
      query+="${query:+&}${k}=${v}"
    done
    echo "${query}"
}


IFS=':' read STATUS REST <<<$(curl -s --fail-with-body -X POST \
     --data-binary @${BOT_DIR}/bot.yaml \
     "http://${REMOTE_HOST}:43500/join?$(build_query "$@")")


if [[ $STATUS != "SUCCESS"  ]]
then
    echo -e "Fehler!\n${REST}"
    exit 1
fi

IFS=':' read SID PORT SEED INIT <<<"$REST"

if [[ $INIT = yes ]]
then
    echo "Session erzeugt!
Sparring-ID: $SID
Der andere Client muss innerhalb von 5 Minuten die Session joinen!
Gespielt wird Seed: $SEED"
else
    echo "Sparring $SID gejoined!
Gespielt wird Seed: $SEED"
fi


cd "${BOT_DIR}"

socat \
     SYSTEM:"bash -c './start.sh ${BOT_ARGS} 2>stderr.log | sed -u \"s/[[:space:]].*//\" | pv -l -N Ticks'",pipes \
     TCP:${REMOTE_HOST}:${PORT},nodelay,retry=60,interval=5


echo "Falls alles gut ging:
Report:
https://${REMOTE_HOST}/matches/${SID}/

Aufzeichnung:
http://${REMOTE_HOST}/matches/${SID}/recording-${SEED}.json.gz
"
