#!/bin/bash

RUNNER_SCRIPT_DIR=$(cd ${0%/*} && pwd)

RUNNER_BASE_DIR=${RUNNER_SCRIPT_DIR%/*}
RUNNER_ETC_DIR=$RUNNER_BASE_DIR/etc
RUNNER_BIN_DIR=$RUNNER_BASE_DIR/bin
RUNNER_LOG_DIR=$RUNNER_BASE_DIR/log

RUNNER_EBIN_DIR=$RUNNER_BASE_DIR/ebin
RUNNER_USER=

# Make sure CWD is set to runner base dir
cd $RUNNER_BASE_DIR

# Extract the target node name from node.args
NAME_ARG=`grep '\-[s]*name' $RUNNER_ETC_DIR/emqtt.args`
if [ -z "$NAME_ARG" ]; then
    echo "emqtt.args needs to have either -name or -sname parameter."
    exit 1
fi

# Learn how to specify node name for connection from remote nodes
echo "$NAME_ARG" | grep '^-sname' > /dev/null 2>&1
if [ "X$?" = "X0" ]; then
    NAME_PARAM="-sname"
    NAME_HOST=""
else
    NAME_PARAM="-name"
    echo "$NAME_ARG" | grep '@.*' > /dev/null 2>&1
    if [ "X$?" = "X0" ]; then
        NAME_HOST=`echo "${NAME_ARG}" | sed -e 's/.*\(@.*\)$/\1/'`
    else
        NAME_HOST=""
    fi
fi

# Extract the target cookie
COOKIE_ARG=`grep '\-setcookie' $RUNNER_ETC_DIR/emqtt.args`
if [ -z "$COOKIE_ARG" ]; then
    echo "emqtt.args needs to have a -setcookie parameter."
    exit 1
fi

# Identify the script name
SCRIPT=`basename $0`

# Parse out release and erts info
ERLANG_BASE_DIR=/usr/local/lib/erlang
START_ERL=`cat $ERLANG_BASE_DIR/releases/start_erl.data`
ERTS_VSN=${START_ERL% *}
APP_VSN=${START_ERL#* }

# Add ERTS bin dir to our path
ERTS_PATH=$ERLANG_BASE_DIR/erts-$ERTS_VSN/bin

# Setup command to control the node
NODETOOL="$ERTS_PATH/escript $RUNNER_BIN_DIR/nodetool $NAME_ARG $COOKIE_ARG"

# Check the first argument for instructions
case "$1" in
    status)
        if [ $# -ne 1 ]; then
            echo "Usage: $SCRIPT status"
            exit 1
        fi

        # Make sure the local node IS running
        RES=`$NODETOOL ping`
        if [ "$RES" != "pong" ]; then
            echo "Node is not running!"
            exit 1
        fi
        shift

        $NODETOOL rpc emqtt_ctl status $@
        ;;

    cluster_info)
        if [ $# -ne 1 ]; then
            echo "Usage: $SCRIPT cluster_info"
            exit 1
        fi

        # Make sure the local node IS running
        RES=`$NODETOOL ping`
        if [ "$RES" != "pong" ]; then
            echo "Node is not running!"
            exit 1
        fi
        shift

        $NODETOOL rpc emqtt_ctl cluster_info $@
        ;;


    cluster)
        if [ $# -ne 2 ]; then
            echo "Usage: $SCRIPT cluster <Node>"
            exit 1
        fi

        # Make sure the local node IS running
        RES=`$NODETOOL ping`
        if [ "$RES" != "pong" ]; then
            echo "emqtt is not running!"
            exit 1
        fi
        shift

        $NODETOOL rpc emqtt_ctl cluster $@
        ;;

    add_user)
        if [ $# -ne 3 ]; then
            echo "Usage: $SCRIPT add_user <Username> <Password>"
            exit 1
        fi

        # Make sure the local node IS running
        RES=`$NODETOOL ping`
        if [ "$RES" != "pong" ]; then
            echo "emqtt is not running!"
            exit 1
        fi
        shift

        $NODETOOL rpc emqtt_ctl add_user $@
        ;;

    delete_user)
        if [ $# -ne 2 ]; then
            echo "Usage: $SCRIPT delete_user <Username>"
            exit 1
        fi

        # Make sure the local node IS running
        RES=`$NODETOOL ping`
        if [ "$RES" != "pong" ]; then
            echo "emqtt is not running!"
            exit 1
        fi
        shift

        $NODETOOL rpc emqtt_ctl delete_user $@
        ;;

    *)
        echo "Usage: $SCRIPT"
		echo "		status       	#query emqtt status"
		echo "		cluster_info    #query cluster nodes"
		echo "		cluster <Node>	#cluster node"
		echo "		add_user <Username> <Password>	#add user"
		echo "		delete_user <Username> 	#delete user"
        exit 1
        ;;
	
esac

