#!/bin/sh

SYSLOG=busybox-syslog.service
KLOGD=busybox-klogd.service
SYSLOG_SOCKET=syslog.socket
CONFFILE=/etc/syslog/syslog.conf
CONFFILE_TMP=/tmp/syslog.conf
SCONFDIR=/etc/configs/
SPLITFLAG=/etc/configs/syslog_split
SD_DIR=`mount | grep mmcblk1 | sed "s/^\/dev\/\(mmcblk1[p1]*\)[[:space:]]*.*$/\1/g"`
RO=`mount | grep mmcblk1 | grep \(ro,`

do_start() {
	systemctl start $SYSLOG_SOCKET
	systemctl start $SYSLOG
}

do_stop() {
	systemctl stop $SYSLOG_SOCKET
	systemctl stop $KLOGD
	systemctl stop $SYSLOG
}

config_init() {
	if [ ! -f "${CONFFILE}" ]; then
		touch "${CONFFILE}"
		echo -e "*.debug\t\t/var/log/syslog.log\n" > ${CONFFILE}
	fi
}

enable_split() {
	if [ ! -d "${SCONFDIR}" ]; then
		mkdir -p "${SCONFDIR}"
	fi
	if [ ! -f "${SPLITFLAG}" ]; then
		touch "${SPLITFLAG}"
	fi
	if [ -z "$SD_DIR" -o ! -z "$RO" ]; then
		echo -e "*.debug\t\t/var/log/syslog.log\n" > ${CONFFILE}
		echo -e "local0.*\t\t/var/log/main.log\n" >> ${CONFFILE}
		echo -e "local1.*\t\t/var/log/system.log\n" >> ${CONFFILE}
		echo -e "local2.*\t\t/var/log/radio.log\n" >> ${CONFFILE}
	else
		echo -e "*.debug\t\t/run/media/${SD_DIR}/syslog.log\n" > ${CONFFILE}
		echo -e "local0.*\t\t/run/media/${SD_DIR}/main.log\n" >> ${CONFFILE}
		echo -e "local1.*\t\t/run/media/${SD_DIR}/system.log\n" >> ${CONFFILE}
		echo -e "local2.*\t\t/run/media/${SD_DIR}/radio.log\n" >> ${CONFFILE}
	fi
}

disable_split() {
	if [ -f "${SPLITFLAG}" ]; then
		rm -rf "${SPLITFLAG}"
	fi
	if [ -z "$SD_DIR" -o ! -z "$RO" ]; then
		echo -e "*.debug\t\t/var/log/syslog.log\n" > ${CONFFILE}
	else
		echo -e "*.debug\t\t/run/media/${SD_DIR}/syslog.log\n" > ${CONFFILE}
	fi
}

do_set_level() {
	LOGLEVEL="debug"
	case $1 in
		0)
			LOGLEVEL="emerg" ;;
		1)
			LOGLEVEL="alert" ;;
		2)
			LOGLEVEL="crit" ;;
		3)
			LOGLEVEL="err" ;;
		4)
			LOGLEVEL="warning" ;;
		5)
			LOGLEVEL="notice" ;;
		6)
			LOGLEVEL="info" ;;
		7)
			LOGLEVEL="debug" ;;
	esac
	
	config_init

	cp -a ${CONFFILE} ${CONFFILE_TMP}
	sed -i "s/^\*\.[a-z*]*/\*\.${LOGLEVEL}/g" ${CONFFILE_TMP}
	cp -a ${CONFFILE_TMP} ${CONFFILE}

	echo "set level $LOGLEVEL"
}

do_set_output() {
	config_init

	cp -a ${CONFFILE} ${CONFFILE_TMP}
	sed -i "s:^\(\*\.[a-z]*[[:space:]]*\)\(.*\)$:\1${1}:g" ${CONFFILE_TMP}
	cp -a ${CONFFILE_TMP} ${CONFFILE}
}

case "$1" in
	start )
		systemctl enable busybox-syslog.service
		do_start
		;;

	stop )
		systemctl disable busybox-syslog.service
		do_stop
		;;

	restart )
		systemctl disable busybox-syslog.service
		do_stop
		systemctl enable busybox-syslog.service
		do_start
		;;

	level )
		LEVEL="$2"
		if [ -z $LEVEL ]; then
			echo "level null"
			exit 1
		fi

		if [[ ! $LEVEL =~ ^[0-9]+$ ]]; then
			echo "level is not digital"
			exit 2
		fi

		if [ $LEVEL -gt 7 ]; then
			echo "level must between 0 and 7"
		else
			do_set_level $LEVEL
		fi
		;;

	split )
		case "$2" in
			enable )
				enable_split
				systemctl disable busybox-syslog.service
				do_stop
				systemctl enable busybox-syslog.service
				do_start
			;;
			disable )
				disable_split
				systemctl disable busybox-syslog.service
				do_stop
				systemctl enable busybox-syslog.service
				do_start
			;;
		esac
		;;

	* )
		echo "Usage: $0 start|stop|restart|level (0-7)|split (enable|disable)"
		;;

esac

