#!/bin/sh
set -eu

APP_DIR="/opt/vigil-vpn"
CONFIG_FILE="${VIGIL_VPN_LAUNCH_CONFIG:-${APP_DIR}/launch.client.json}"
GUI_CONFIG="${VIGIL_VPN_GUI_CONFIG:-${APP_DIR}/gui_config.json}"
STATE_HOME="${XDG_STATE_HOME:-${HOME}/.local/state}"
LOG_DIR="${STATE_HOME}/vigil-vpn"

mkdir -p "${LOG_DIR}" 2>/dev/null || true

backend_is_running() {
    pgrep -f "[S]wLaunch.*${CONFIG_FILE}" >/dev/null 2>&1
}

start_backend() {
    if backend_is_running; then
        return 0
    fi

    if [ "$(id -u)" -eq 0 ]; then
        nohup /usr/bin/vigil-vpn-backend >>"${LOG_DIR}/backend.log" 2>&1 &
        return 0
    fi

    if command -v pkexec >/dev/null 2>&1; then
        pkexec /usr/bin/vigil-vpn-backend >>"${LOG_DIR}/backend.log" 2>&1 &
    elif command -v sudo >/dev/null 2>&1 && sudo -n true >/dev/null 2>&1; then
        nohup sudo -n /usr/bin/vigil-vpn-backend >>"${LOG_DIR}/backend.log" 2>&1 &
    else
        echo "Vigil VPN needs administrator rights to start the TUN backend." >&2
        echo "Install pkexec/polkit, or run 'sudo -v' before launching Vigil VPN." >&2
        return 1
    fi

    i=0
    while [ "${i}" -lt 40 ]; do
        if backend_is_running; then
            return 0
        fi
        i=$((i + 1))
        sleep 0.25
    done

    echo "Vigil VPN backend did not start. See ${LOG_DIR}/backend.log." >&2
    return 1
}

start_backend
exec "${APP_DIR}/VigilVpnConsole" --config_file="${GUI_CONFIG}" "$@"
