#!/bin/bash

# SVC - SV Commander - frontend for the sv command

###############################################################################################
## Copyright (c) 2015, Justin Moore
##
## Permission to use, copy, modify, and/or distribute this software
## for any purpose with or without fee is hereby granted,
## provided that the above copyright notice and this permission notice appear in all copies.
##
## THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
## WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
## AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT,
## OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
## WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
##############################################################################################

LRED="\033[1;31m"
LGREEN="\033[1;32m"
LCYAN="\033[1;36m"
NC='\033[0m' # No Color


if [[ -f "/usr/bin/sv " ]];then
	serviceManager="runit"
	echo -e "${LGREEN}Detected Runit${NC}\n"
elif [[ -f "/usr/bin/systemctl" ]];then
	serviceManager="systemd"
	echo -e "${LGREEN}Detected SystemD${NC}\n"
else
	echo -e "${LRED}no supported service manager found${NC}\n"
fi




help(){
printf """	
svc - Service Commander - frontend for the sv command
	
Usage: svc enable | disable | enabled | list | up | start | restart | stop <service>
	
	
For detailed help, see the commands below:
	
	
start		Start an enabled service
restart		Restart a enabled service
stop		Stop an enabled service
enable		Symenlink directory/file to /var/service
disable 	Remove symlink from /var/service
enabled		View synlinked paths of all services
ls		    List enabled and unenabled service files
up		    Show status of running services

"""
}

runit(){
	case $1 in

			enable | --enable-service )
				ln -v -s /etc/sv/"${2}" /var/service/
			;;

			disable | --remove-service )
				rm -v /var/service/"${2}"
			;;

			enabled | --enabled-services )
				cd /etc/sv && find -xtype l -exec ls -l {} \;
			;;

			list | ls | --list )

				echo
				echo -e "${LGREEN}Available Services (/etc/sv/):${NC}\n"
				ls /etc/sv
				echo
				echo -e "${LCYAN}Enabled Services (/var/service):${NC}\n"
				echo
				ls /var/service
				echo
			;;

			up )
				sv s /var/service/*
			;;

			start )
				sv start "${2}"
			;;

			restart )
				sv restart "${2}"
			;;

			stop )
				sv stop "${2}"
			;;

			--help | -h | help )
				help
			;;
	esac
}


systemd(){

	case "${1}" in
		enable | --enable-service)
			systemctl enable "${2}"
		;;

		disable | --disable-service)
			systemctl disable "${2}"
		;;

		enabled | --enabled-services)
			systemctl list-unit-files --state=enabled
		;;

		list | ls | --list)
			echo
			echo -e "${LGREEN}Available Services (/etc/systemd/system):${NC}\n"
			ls /etc/systemd/system/
			echo
			echo -e "${LCYAN}Enabled Services:${NC}\n"
			systemctl list-unit-files --state=enabled
			echo
		;;
		up)
			if [[ ! -z "${2}" ]];then
				systemctl status "${2}"
			else
				systemctl --type=service --state=running
			fi

		;;

		start)
			systemctl start "${2}"
		;;

		restart)
			systemctl restart "${2}"
		;;

		stop)
			systemctl stop "${2}"
		;;

		--help | -help | help)
			help
		;;


			

	esac
}

if [[ "${serviceManager}" = "runit" ]];then
	runit "${1}" "${2}"
elif [[ "${serviceManager}" = "systemd" ]];then
	systemd "${1}" "${2}"
fi