#!/bin/sh
###############################################################################
# Copyright (C) 2020 Simon Adlem, G7RZU <g7rzu@gb7fr.org.uk>  
#
#   This program is free software; you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation; either version 3 of the License, or
#   (at your option) any later version.
#
#   This program is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#   GNU General Public License for more details.
#
#   You should have received a copy of the GNU General Public License
#   along with this program; if not, write to the Free Software Foundation,
#   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
###############################################################################

/bin/sh /opt/freedmr/docker-configs/check-deployment-version.sh \
        /opt/freedmr/freedmr.cfg || exit $?

cd /opt/freedmr

# Supervisor reads only this switch; the exporter reads its credentials directly.
case "${REPORT_SQL_ENABLED:-false}" in
        1|true|TRUE|yes|YES|on|ON) REPORT_SQL_ENABLED=true ;;
        0|false|FALSE|no|NO|off|OFF|'') REPORT_SQL_ENABLED=false ;;
        *) echo 'REPORT_SQL_ENABLED must be a boolean' >&2; exit 2 ;;
esac
export REPORT_SQL_ENABLED

HDSTACK_COUNT="${HDSTACK:-}"
HDSTACK_BRIDGE="${HDSTACK_BRIDGE:-0}"
HDSTACK_OUTPUT_DIR="${HDSTACK_OUTPUT_DIR:-/dev/shm/freedmr-hdstack}"
HDSTACK_BRIDGE_CONFIG="${HDSTACK_BRIDGE_CONFIG:-/opt/freedmr/freedmr-bridge.cfg}"
HDSTACK_BRIDGE_RULES="${HDSTACK_BRIDGE_RULES:-/opt/freedmr/rules.py}"

if [ -z "$HDSTACK_COUNT" ]
then
        CPU_COUNT=$(getconf _NPROCESSORS_ONLN 2>/dev/null)
        case "$CPU_COUNT" in
                ''|*[!0-9]*) CPU_COUNT=2 ;;
        esac
        HDSTACK_COUNT=$((CPU_COUNT - 1))
        if [ "$HDSTACK_COUNT" -lt 1 ]
        then
                HDSTACK_COUNT=1
        elif [ "$HDSTACK_COUNT" -gt 5 ]
        then
                HDSTACK_COUNT=5
        fi
fi

HDSTACK_BASEID="${HDSTACK_BASEID:-}"
if [ -z "$HDSTACK_BASEID" ]
then
        HDSTACK_BASEID=$(awk -F: '
                /^\[GLOBAL\]/ { in_global = 1; next }
                /^\[/ { in_global = 0 }
                in_global && $1 ~ /^[[:space:]]*SERVER_ID[[:space:]]*$/ {
                        gsub(/[[:space:]]/, "", $2)
                        print $2
                        exit
                }
        ' /opt/freedmr/freedmr.cfg)
fi

if [ "$BRIDGE_SERVER" == 1 ]
then
        echo 'Starting in Bridge mode...'
        exec python /opt/freedmr/bridge.py -c freedmr.cfg -r rules.py

elif [ "$HDSTACK_COUNT" = 1 ]
then
        echo 'Starting in FreeDMR mode...'
        exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
        #python /opt/freedmr/hotspot_proxy_v2.py &
        #python /opt/freedmr/playback.py -c loro.cfg &
        #exec python /opt/freedmr/bridge_master.py -c freedmr.cfg

elif [ "$HDSTACK_COUNT" -ge 2 ] 2>/dev/null && [ "$HDSTACK_COUNT" -le 5 ] 2>/dev/null
then
        if [ -z "$HDSTACK_BASEID" ]
        then
                echo 'HDSTACK_BASEID is required when HDSTACK is 2..5' >&2
                exit 2
        fi

        echo "Starting HDStack with $HDSTACK_COUNT workers (base server ID $HDSTACK_BASEID, bridge $HDSTACK_BRIDGE)..."
        python /opt/freedmr/hdstack_runtime.py \
                --main-config /opt/freedmr/freedmr.cfg \
                --bridge-config "$HDSTACK_BRIDGE_CONFIG" \
                --bridge-rules "$HDSTACK_BRIDGE_RULES" \
                --output-dir "$HDSTACK_OUTPUT_DIR" \
                --instances "$HDSTACK_COUNT" \
                --base-id "$HDSTACK_BASEID" \
                --loro-config /opt/freedmr/loro.cfg \
                --bridge-enabled "$HDSTACK_BRIDGE"
        status=$?
        if [ "$status" -ne 0 ]
        then
                exit "$status"
        fi
        exec /usr/bin/supervisord -c "$HDSTACK_OUTPUT_DIR/supervisord.conf"

else
        echo 'HDSTACK must be omitted or set to an integer from 1 to 5' >&2
        exit 2
fi
