#!/usr/bin/env bash

# These vars must be provided from
# FidoNMS base config

NMSBASE=/opt/fidonms
FIDOBASE=/var/spool/ftn
NEED_POLL=0
NOTIFY_BIN=/opt/fidonms/bin/notifymail
FLAGLOG=$FIDOBASE/flaglog.txt

# These vars are built in-script
HPT_BIN=$(which hpt)
HTICK_BIN=$(which htick)

if [ -z "${FIDOCONFIG}" ]; then
    FIDOCONFIG=$NMSBASE/etc/config
fi

# Flags from mailer
FLAG_TOSS=$FIDOBASE/flags/toss
FLAG_TICK=$FIDOBASE/flags/tick
FLAG_INET=$FIDOBASE/flags/mail
FLAG_FILE=$FIDOBASE/flags/file

# Flags from tosser
FLAG_ALRT=$FIDOBASE/flags/hpt-mail

# Flags from editor
FLAG_MAIL=$FIDOBASE/flags/netscan
FLAG_ECHO=$FIDOBASE/flags/echoscan

# Semaphores (do not delete manually)
SEM_ECHO=$FIDOBASE/flags/echotoss.log

# Flags from robots (forwards)
FLAG_AFIX=$FIDOBASE/flags/changed.qfl

# Flags from cron/user
FLAG_POLL=$FIDOBASE/flags/poll

# Internal bsy flag
FLAG_FBSY=$FIDOBASE/flags/flagcheck_bsy

CURDATE=$(date '+%d.%m.%Y %H:%M:%S') 

function do_filecheck() {
    if [ -f $NMSBASE/bin/filecheck ]; then
        echo -ne "FILECHECK " >> ${FLAGLOG}
        $NMSBASE/bin/filecheck
    fi
}

function do_ticcheck() {
    if [ -f $NMSBASE/bin/ticcheck ]; then
        echo -ne "TICCHECK " >> ${FLAGLOG}
        $NMSBASE/bin/ticcheck
    fi
}

function do_toss() {
    echo -ne "TOSS " >> ${FLAGLOG}
    $HPT_BIN -c "$FIDOCONFIG" toss
    $HTICK_BIN -c "$FIDOCONFIG" toss
    echo -ne "LINK " >> ${FLAGLOG}
    $HPT_BIN -c "$FIDOCONFIG" link
    sync
    # do_echoscan
}

function do_tick() {
    echo -ne "FTOSS " >> ${FLAGLOG}
    $HTICK_BIN -c "$FIDOCONFIG" toss
    do_ticcheck
    echo -ne "FANNOUNCE " >> ${FLAGLOG}
    $HTICK_BIN -c "$FIDOCONFIG" announce
}

function do_netscan() {
    echo -ne "PACK " >> ${FLAGLOG}
    $HPT_BIN -c "$FIDOCONFIG" pack
}

function do_echoscan() {
    echo -ne "SCAN " >> ${FLAGLOG}
    $HPT_BIN -c "$FIDOCONFIG" scan
    $HTICK_BIN -c "$FIDOCONFIG" scan
}

function do_qupd() {
    echo -ne "QUPD " >> ${FLAGLOG}
    $HPT_BIN -c "$FIDOCONFIG" qupd
    echo -ne "QREP " >> ${FLAGLOG}
    $HPT_BIN -c "$FIDOCONFIG" qrep -d
}

function do_poll() {
    echo -ne "POLL " >> ${FLAGLOG}
    # $NMSBASE/bin/poll
    $NMSBASE/bin/poll_links_flo
}

function do_notify() {
    if [ -f $NOTIFY_BIN ]; then
	$NOTIFY_BIN
	echo -ne "NOTIFY " >> ${FLAGLOG}
    fi
}

if [ ! -e $FLAG_FBSY ]; then
	# MAIN Sequence
	touch $FLAG_FBSY
	# echo "Begin"
	FLAGSEQ=0
	until [ ! -e $FLAG_AFIX ] && [ ! -e $FLAG_INET ] && [ ! -e $FLAG_ALRT ] \
	    && [ ! -e $FLAG_POLL ] && [ ! -e $SEM_ECHO ] && [ ! -e $FLAG_MAIL ] \
	    && [ ! -e $FLAG_ECHO ] && [ ! -e $FLAG_TICK ] && [ ! -e $FLAG_TOSS ] \
	    && [ ! -e $FLAG_FILE ]; do
		if [[ "${FLAGSEQ}" == "0" ]]; then
		    echo -e "----- ${CURDATE} -----" >> ${FLAGLOG}
		fi
		FLAGSEQ=1
		
		if [ -e $FLAG_ALRT ] && [ ! -e ${FLAG_ALRT}.bsy ]; then
                        mv -f $FLAG_ALRT ${FLAG_ALRT}.bsy
                        # do_echoscan
                        # do_netscan
                        echo "Alerting to mail..."
                        echo -ne "FLAG_ALRT " >> ${FLAGLOG}
                        do_notify
                        echo "Done alerting."
                        rm -f ${FLAG_ALRT}.bsy
                fi
                
    		if [ -e $FLAG_TOSS ] && [ ! -e ${FLAG_TOSS}.bsy ]; then
			mv -f $FLAG_TOSS ${FLAG_TOSS}.bsy
			echo "Toss and link incoming packets"
			echo -ne "FLAG_TOSS " >> ${FLAGLOG}
			do_toss
			echo "Done tossing and linking incoming net&echomail."
			rm -f ${FLAG_TOSS}.bsy
		fi
		
		if [ -e $FLAG_INET ] && [ ! -e ${FLAG_INET}.bsy ]; then
			mv -f $FLAG_INET ${FLAG_INET}.bsy
			echo "Toss incoming netmail"
			echo -ne "FLAG_INET " >> ${FLAGLOG}
			do_toss
			echo "Done tossing incoming netmail."
			rm -f ${FLAG_INET}.bsy
		fi
		
		if [ -e $FLAG_TICK ] && [ ! -e ${FLAG_TICK}.bsy ]; then
			mv -f $FLAG_TICK ${FLAG_TICK}.bsy
			echo "Tossing incoming fileecho..."
			echo -ne "FLAG_TICK " >> ${FLAGLOG}
			do_tick
			echo "Done ticking fileecho."
			rm -f ${FLAG_TICK}.bsy
		fi

		if [ -e $FLAG_FILE ] && [ ! -e ${FLAG_FILE}.bsy ]; then
			mv -f $FLAG_FILE ${FLAG_FILE}.bsy
			echo "Processing incoming files..."
			echo -ne "FLAG_FILE " >> ${FLAGLOG}
			do_filecheck
			echo "Done processing files."
			rm -f ${FLAG_FILE}.bsy
		fi
		
		if [ -e $FLAG_AFIX ] && [ ! -e ${FLAG_AFIX}.bsy ]; then
			echo "Forward request occured..."
			mv -f $FLAG_AFIX ${FLAG_AFIX}.bsy
			echo -ne "FLAG_AFIX " >> ${FLAGLOG}
			do_qupd
			touch $FLAG_MAIL
			echo "Done forwarding request..."
			rm -f ${FLAG_AFIX}.bsy
		fi

		if [ -e $FLAG_MAIL ] && [ ! -e ${FLAG_MAIL}.bsy ]; then
                        mv -f $FLAG_MAIL ${FLAG_MAIL}.bsy
                        echo "Scanning netmail..."
                        echo -ne "FLAG_MAIL " >> ${FLAGLOG}
                        # do_netscan
			do_echoscan
			
                        echo "Done scanning netmail."
                        rm -f ${FLAG_MAIL}.bsy
                fi
			
		if [ -e $FLAG_ECHO ] && [ ! -e ${FLAG_ECHO}.bsy ]; then
			mv -f $FLAG_ECHO ${FLAG_ECHO}.bsy
			echo "Scanning echomail..."
			echo -ne "FLAG_ECHO " >> ${FLAGLOG}
			do_echoscan
			echo "Done scanning echomail."
			rm -f ${FLAG_ECHO}.bsy
		fi

                if [ -e $SEM_ECHO ]; then
                        echo "Semaphore found > tossing echomail..."
                        echo -ne "SEM_ECHO " >> ${FLAGLOG}
                        touch $FLAG_ECHO
                fi

		if [ -e $FLAG_POLL ] && [ ! -e ${FLAG_POLL}.bsy ]; then
                        mv -f $FLAG_POLL ${FLAG_POLL}.bsy
                        echo "Polling links..."
                        echo -ne "FLAG_POLL " >> ${FLAGLOG}
                        do_poll
                        echo "Done polling."
                        rm -f ${FLAG_POLL}.bsy
                fi

	
	done
	# echo "Done."
	rm $FLAG_FBSY
	
	#running extflagscheck
	#and putting dot in sequence if any of flags was found
	if [[ "${FLAGSEQ}" == "1" ]]; then
	    ${NMSBASE}/bin/extflagchk
	    echo -e "." >> ${FLAGLOG}
	fi
fi