#!/bin/bash

function symlink_client_files() {
    echo "Creating symlinks for client files"
    ln -s /client/client/res/macros/ /app/res/macros
    ln -s /client/client/res/BrickModels/ /app/res/BrickModels
    ln -s /client/client/res/chatplus_en_us.txt /app/res/chatplus_en_us.txt
    ln -s /client/client/res/names/ /app/res/names
    ln -s /client/client/res/CDServer.sqlite /app/res/CDServer.sqlite
    
    # need to create this file so the server knows the client is unpacked (see `dCommon/dClient/AssetManager.cpp`)
    touch /app/res/cdclient.fdb
    # need to iterate over entries in maps due to maps already being a directory with navmeshes/ in it
    (
        cd /client/client/res/maps
        readarray -d '' entries < <(printf '%s\0' * | sort -zV)
        for entry in "${entries[@]}"; do
            ln -s /client/client/res/maps/$entry /app/res/maps/
        done
    )
}

function symlink_config_files() {
    echo "Creating symlinks for config files"
    rm /app/*.ini
    ln -s /shared_configs/configs/authconfig.ini /app/authconfig.ini
    ln -s /shared_configs/configs/chatconfig.ini /app/chatconfig.ini
    ln -s /shared_configs/configs/masterconfig.ini /app/masterconfig.ini
    ln -s /shared_configs/configs/worldconfig.ini /app/worldconfig.ini
    ln -s /shared_configs/configs/sharedconfig.ini /app/sharedconfig.ini
}

# check to make sure the setup has completed
while [ ! -f "/client/extracted" ] || [ ! -f "/client/migrated" ]; do
    echo "Client setup not finished. Waiting for setup container to complete..."
    sleep 5
done

if [[ ! -f "/app/initialized" ]]; then
    # setup symlinks for volume files
    symlink_client_files
    symlink_config_files
    # do not run symlinks more than once
    touch /app/initialized
else
    echo "Server already initialized"
fi

# start the server
echo "Starting MasterServer"
./MasterServer
tail -f /dev/null