#!/bin/bash

set -xeuo pipefail

# -- DEFINE FUNCTIONS AND VARIABLES -- #

function steam() {
    # for systemd, so it can terminate the process (for other things sudo would have been enough)
    setpriv --reuid=steam --regid=steam --init-groups "$@" <&0
    export HOME=/opt/l4d2/steam
}

# -- PREPARE SYSTEM -- #

getent passwd steam >/dev/null || useradd -M -d /opt/l4d2 -s /bin/bash steam
mkdir -p /opt/l4d2 /tmp/dumps
chown steam:steam /opt/l4d2 /tmp/dumps
dpkg --add-architecture i386
apt update
DEBIAN_FRONTEND=noninteractive apt install -y libc6:i386 lib32z1

# workshop downloader
test -f /opt/l4d2/scripts/steam-workshop-download || \
    steam wget -4 https://git.sublimity.de/cronekorkn/steam-workshop-downloader/raw/branch/master/steam-workshop-download -P /opt/l4d2/scripts
steam chmod +x /opt/l4d2/scripts/steam-workshop-download

# -- STEAM -- #

steam mkdir -p /opt/l4d2/steam
test -f /opt/l4d2/steam/steamcmd_linux.tar.gz || \
    steam wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz -P /opt/l4d2/steam
test -f /opt/l4d2/steam/steamcmd.sh || \
    steam tar -xvzf /opt/l4d2/steam/steamcmd_linux.tar.gz -C /opt/l4d2/steam

# fix for: /opt/l4d2/.steam/sdk32/steamclient.so: cannot open shared object file: No such file or directory
steam mkdir -p /opt/l4d2/steam/.steam # needs to be in steam users home dir
readlink /opt/l4d2/steam/.steam/sdk32 | grep -q ^/opt/l4d2/steam/linux32$ || \
    steam ln -sf /opt/l4d2/steam/linux32 /opt/l4d2/steam/.steam/sdk32
readlink /opt/l4d2/steam/.steam/sdk64 | grep -q ^/opt/l4d2/steam/linux64$ || \
    steam ln -sf /opt/l4d2/steam/linux64 /opt/l4d2/steam/.steam/sdk64

# -- INSTALL -- #

# erst die windows deps zu installieren scheint ein workaround für x64 zu sein?
steam mkdir -p /opt/l4d2/installation
steam /opt/l4d2/steam/steamcmd.sh \
    +force_install_dir /opt/l4d2/installation \
    +login anonymous \
    +@sSteamCmdForcePlatformType windows \
    +app_update 222860 validate \
    +quit
steam /opt/l4d2/steam/steamcmd.sh \
    +force_install_dir /opt/l4d2/installation \
    +login anonymous \
    +@sSteamCmdForcePlatformType linux \
    +app_update 222860 validate \
    +quit

# -- OVERLAYS -- #

for overlay_path in /opt/l4d2/scripts/overlays/*; do
    overlay=$(basename "$overlay_path")
    steam mkdir -p /opt/l4d2/overlays/$overlay
    bash -xeuo pipefail "$overlay_path"
    test -f /opt/l4d2/overlays/$overlay/left4dead2/cfg/server.cfg && \
        steam cp /opt/l4d2/overlays/$overlay/left4dead2/cfg/server.cfg /opt/l4d2/overlays/$overlay/left4dead2/cfg/server_$overlay.cfg
done

# -- SERVERS -- #

#steam rm -rf /opt/l4d2/servers
steam mkdir -p /opt/l4d2/servers
