#!/usr/bin/env bash
set -uo pipefail

INSTALL_ROOT="${XDG_DATA_HOME:-$HOME/.local/share}/CryoHost/CryoRadio Receiver"
RECEIVER="$INSTALL_ROOT/CryoRadio.Receiver"
LOG_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/CryoHost/CryoRadio/logs"
SESSION_LOG="$LOG_DIR/session-wrapper.log"

mkdir -p "$LOG_DIR"

if [[ ! -x "$RECEIVER" ]]; then
    printf '%s\n' "CryoRadio Receiver is not installed correctly: $RECEIVER" >&2
    exec "$@"
fi

if [[ "$#" -eq 0 ]]; then
    printf '%s\n' "CryoRadio session wrapper received no Project Zomboid command." >&2
    exit 64
fi

"$RECEIVER" --worker >>"$SESSION_LOG" 2>&1 &
receiver_pid=$!

cleanup_receiver() {
    if kill -0 "$receiver_pid" 2>/dev/null; then
        kill -TERM "$receiver_pid" 2>/dev/null || true
        for _ in {1..30}; do
            if ! kill -0 "$receiver_pid" 2>/dev/null; then
                break
            fi
            sleep 0.1
        done
        if kill -0 "$receiver_pid" 2>/dev/null; then
            kill -KILL "$receiver_pid" 2>/dev/null || true
        fi
    fi
    wait "$receiver_pid" 2>/dev/null || true
}

trap cleanup_receiver EXIT INT TERM HUP

"$@"
game_status=$?
cleanup_receiver
trap - EXIT INT TERM HUP
exit "$game_status"
