#!/bin/sh

# If exists tmux session
# If Responds to queries

SERVER_DIR='/home/ubuntu/minecraft/servers/kincls'
TMUX_NAME='minecraft kincls server'
EMPTY_COUNTER="$SERVER_DIR/empty_counter.txt"

json_parse() {
    cat - | python3 -c "import sys, json; print(json.load(sys.stdin)['$1'])"
}

silent_exitcode() {
    $* > /dev/null 2>&1
}

empty_count() {
    if [ ! -f "$EMPTY_COUNTER" ]; then
        # File not existing
        echo "0"
    else
        cat "$EMPTY_COUNTER"
    fi
}

empty_incr() {
    c="$(empty_count)"
    if [ "$c" -gt 10 ]; then
        echo "Server empty for more than 10 minutes, shutting down"
        empty_reset # Needs to be 0 next time server starts
        tmux send-keys -t "$TMUX_NAME.0" "stop" ENTER
        sleep 5
        $(sudo /sbin/shutdown -P +1)
    else
        echo "Empty count $c. Incrementing"
        echo "$((c+1))" > "$EMPTY_COUNTER"
    fi
}

empty_reset() {
    echo "Resetting empty counter"
    echo 0 > "$EMPTY_COUNTER"
}

tmux_running() {
    tmux ls -F "#{session_name}" | grep -q "$TMUX_NAME"
}

server_responsive() {
    silent_exitcode mcstatus localhost ping
}

n_logins="$(w -h | wc -l)"
echo "$(date) [$n_logins logins]"

if [ "$n_logins" -gt 0 ]; then
    echo "Keep alive as there are active ssh sessions"
    empty_reset
    exit 0
fi

if tmux_running; then
    : #echo "Tmux running"
else
    echo "Tmux not running"
    empty_incr
    exit 1
fi

if server_responsive; then
    n_players=$(mcstatus localhost json | json_parse player_count)
    echo "Server responsive. $n_players players online"
    if [ "$n_players" -gt 0 ]; then
        # Keep alive as players are online
        empty_reset
        exit 0
    else
        empty_incr
        exit 1
    fi
else
    echo "Server unresponsive"
    empty_incr
    exit 1
fi
