#!/bin/bash


LIB_DIR=/usr/lib/tuxum-remote

. ${LIB_DIR}/tuxumremote.functions

function usage()
{
	echo "Usage: tuxumremote-schedule <configuration> <program>"
	echo "Example: tuxumremote-schedule sample_fullbackup tuxumbackup"
}

DATE=`date +%F`

CONFIG=$1
PROGRAM=`echo $2 | toLower`

if [ -z "${PROGRAM}" ] || [ -n "$3" ]
then
	usage
	exit 1
fi

if ! [ "${PROGRAM}" == "tuxumbackup" ] && ! [ "${PROGRAM}" == "tuxumav" ] && ! [ "${PROGRAM}" == "tuxumfs" ]
then
	echo "Error 2: 'program' must be one of tuxumbackup, tuxumav or tuxumfs"
	exit 2
else
	if [ "${PROGRAM}" == "tuxumbackup" ]
	then
		CONFIG_DIR=/etc/tuxum-backup
	fi

	if [ "${PROGRAM}" == "tuxumav" ]
	then
		CONFIG_DIR=/etc/tuxum-av
	fi

	if [ "${PROGRAM}" == "tuxumfs" ]
	then
		CONFIG_DIR=/etc/tuxum-fs
	fi
fi

if ! [ -e ${CONFIG_DIR}/${CONFIG}.conf ]
then
	echo "Error 3: Cannot find the file ${CONFIG_DIR}/${CONFIG}.conf"
	exit 3
fi



FREQUENCY=`getParameter ${CONFIG_DIR}/${CONFIG}.conf frequency | toUpper`

if  ! [ "${FREQUENCY}" == "YEARLY" ] && ! [ "${FREQUENCY}" == "MONTHLY" ] && ! [ "${FREQUENCY}" == "BI-WEEKLY" ] && ! [ "${FREQUENCY}" == "WEEKLY" ] && ! [ "${FREQUENCY}" == "DAILY" ] && ! [ "${FREQUENCY}" == "HOURLY" ]
then
	echo "Error 4: Missing or bad 'frequency' parameter in config file ${CONFIG_DIR}/${CONFIG}.conf"
	exit 4
fi

MONTH=`getParameter ${CONFIG_DIR}/${CONFIG}.conf month`

if  [ -z "${MONTH}" ]
then
	if [ "${FREQUENCY}" == "YEARLY" ]
	then
		echo "Error 5: Missing 'month' parameter in config file ${CONFIG_DIR}/${CONFIG}.conf"
		echo "The parameter 'month' must be defined when 'frequency=WEEKLY'"
		exit 5
	else
		MONTH="*"
	fi
fi

DAY=`getParameter ${CONFIG_DIR}/${CONFIG}.conf day`
if [ -z "${DAY}" ]
then
	if [ "${FREQUENCY}" == "YEARLY" ] || [ "${FREQUENCY}" == "MONTHLY" ]
	then
		echo "Error 6: Missing 'day' parameter in config file ${CONFIG_DIR}/${CONFIG}.conf"
		echo "The parameter 'day' must be defined when 'frequency=YEARLY' or 'frequency=MONTHLY'"
		exit 6
	else
		DAY="*"
	fi
fi

EXCLUDE_WEEKDAYS=`getParameter ${CONFIG_DIR}/${CONFIG}.conf exclude_weekdays`
if [ "${FREQUENCY}" == "WEEKLY" ] || [ "${FREQUENCY}" == "BI-WEEKLY" ]
then
	WEEKDAY=`getParameter ${CONFIG_DIR}/${CONFIG}.conf weekday`
else
	WEEKDAY=""
fi

if [ -z "${WEEKDAY}" ]
then
	if [ "${FREQUENCY}" == "WEEKLY" ] || [ "${FREQUENCY}" == "BI-WEEKLY" ]
	then
		echo "Error 7: Missing 'weekday' parameter in config file ${CONFIG_DIR}/${CONFIG}.conf"
		echo "The parameter 'weekday' must be defined when 'frequency=WEEKLY' or 'frequency=BI-WEEKLY'"
		exit 7
	else
		if [ "${FREQUENCY}" == "DAILY" ] || [ "${FREQUENCY}" == "HOURLY" ]
		then
			if [ -z "${EXCLUDE_WEEKDAYS}" ]
			then
				WEEKDAY="*"
			else
				for i in 0 1 2 3 4 5 6
				do
					IS_EXCLUDED=`echo "${EXCLUDE_WEEKDAYS}" | grep "$i"`
					if [ -z "${IS_EXCLUDED}" ]
					then
						if [ -z "${WEEKDAY}" ]
						then
							WEEKDAY=$i
						else
							WEEKDAY=${WEEKDAY},$i
						fi
					fi
				done
			fi
		else
			WEEKDAY="*"
		fi
	fi
fi

EXCLUDE_HOURS=`getParameter ${CONFIG_DIR}/${CONFIG}.conf exclude_hours`
TIME=`getParameter ${CONFIG_DIR}/${CONFIG}.conf hour`

HOUR=`echo ${TIME} | awk -F ':' '{print $1}'`
MINUTE=`echo ${TIME} | awk -F ':' '{print $2}'`

if [ -z "${HOUR}" ] || [ -z "${MINUTE}" ]
then
	echo "Error 8: Missing or bad 'hour' parameter in config file ${CONFIG_DIR}/${CONFIG}.conf"
	echo "The parameter 'hour' must be of the form 'HH:MM', for example: 10:45"
	exit 8
fi

if [ "${FREQUENCY}" == "HOURLY" ]
then
	if [ -z "${EXCLUDE_HOURS}" ]
	then
		HOUR="*"
	else
		for ((i=0; i<=23; i++))
		do
			IS_EXCLUDED=`echo "${EXCLUDE_HOURS}" | grep -w "$i"`
			if [ -z "${IS_EXCLUDED}" ]
			then
				HOUR=${HOUR},$i
			fi
		done
	fi
fi

USER=`id -u -n`
TEMPFILE=/tmp/tuxumremote-${USER}-${CONFIG}.crontab

rm -f ${TEMPFILE}

if [ -e ${TEMPFILE} ]
then
	echo "Error 9: File ${TEMPFILE} exists and is not owned by ${USER}"
	echo "It seems that someone is trying to do something nasty on this server"
	echo "Please, remove it manually and try again"
	exit 9
fi

touch ${TEMPFILE}
chmod 700 ${TEMPFILE}
crontab -l 2>/dev/null | grep -v -w "${PROGRAM} ${CONFIG}" > ${TEMPFILE}

if [ "${FREQUENCY}" == "BI-WEEKLY" ]
then
	echo "${MINUTE} ${HOUR} ${DAY} ${MONTH} ${WEEKDAY} [[ $(expr `date +%W` % 2) = 0 ]] && ${PROGRAM} ${CONFIG}" >> ${TEMPFILE}
else
	echo "${MINUTE} ${HOUR} ${DAY} ${MONTH} ${WEEKDAY} ${PROGRAM} ${CONFIG}" >> ${TEMPFILE}
fi

crontab ${TEMPFILE}

rm -f ${TEMPFILE}
