#!/bin/bash

set -xeuo pipefail

name=""
port=""
configfile=""
overlays=""
arguments=""

while [[ $# -gt 0 ]]; do
  case "$1" in
    -n|--name)
      name="$2"; shift 2
      ;;
    -p|--port)
      port="$2"; shift 2
      ;;
    -c|--config)
      configfile="$2"; shift 2
      ;;
    -o|--overlay)
      overlays="/opt/l4d2/overlays/$2:$overlays"; shift 2
      ;;
    --)
      shift
      arguments+="$@"
      break
      ;;
    *)
      echo "ERROR: unknown argument $1"; exit 1
      ;;
  esac
done

[[ -n "${name}" ]] || { echo "ERROR: -n/--name missing"; exit 1; }
[[ -n "${port}" ]] || { echo "ERROR: -p/--port missing"; exit 1; }

# -- HELPER FUNCTIONS -- #

function steam() {
    # für systemd, damit es den prozess beenden kann
    setpriv --reuid=steam --regid=steam --init-groups "$@"
    export HOME=/opt/l4d2/steam
}

# -- TIDY UP -- #

mountpoint -q "/opt/l4d2/servers/$name/merged" && umount "/opt/l4d2/servers/$name/merged"
steam rm -rf "/opt/l4d2/servers/$name"

# -- CREATE DIRECTORIES -- #

steam mkdir -p \
  "/opt/l4d2/servers/$name" \
  "/opt/l4d2/servers/$name/work" \
  "/opt/l4d2/servers/$name/upper" \
  "/opt/l4d2/servers/$name/merged"

# -- MOUNT OVERLAYFS -- #

mount -t overlay overlay \
  -o "lowerdir=$overlays/opt/l4d2/installation,upperdir=/opt/l4d2/servers/$name/upper,workdir=/opt/l4d2/servers/$name/work" \
  "/opt/l4d2/servers/$name/merged"

# -- REPLACE SERVER.CFG -- #

if [[ -n "$configfile" ]]; then
  cp "$configfile" "/opt/l4d2/servers/$name/merged/left4dead2/cfg/server.cfg"
  chown steam:steam "/opt/l4d2/servers/$name/merged/left4dead2/cfg/server.cfg"
fi

# -- RUN L4D2 -- #

steam "/opt/l4d2/servers/$name/merged/srcds_run" -norestart -pidfile "/opt/l4d2/servers/$name/pid" -game left4dead2 -ip 0.0.0.0 -port "$port" +hostname "Crone_$name" +map c1m1_hotel $arguments