#!/bin/sh -e

dinit_live() {
  if [ ! -S /run/dinitctl ]; then
    echo >&2 "  Skipped: Current root is not booted."
    exit 0
  fi
}

svc_help(){
    echo "	==> Start/stop/restart a service:"
    echo "	dinitctl <start/stop/restart> <service>"
}

svc_add_help(){
    echo "	==> Add a service:"
    echo "	# dinitctl enable <service>"
    svc_help
}

svc_del_help(){
    echo "	==> Remove a service:"
    echo "	# dinitctl disable <service>"
    svc_help
}

svc_user_add_help(){
    echo "	==> Add a user service:"
    echo "	$ dinitctl enable <service>"
    svc_help
}

svc_user_del_help(){
    echo "	==> Remove a user service:"
    echo "	$ dinitctl disable <service>"
    svc_help
}

each_conf() {
  while read -r f; do
    "$@" "/$f"
  done
}

reload_dbus() {
    dbus-send --print-reply --system --type=method_call \
            --dest=org.freedesktop.DBus \
            / org.freedesktop.DBus.ReloadConfig > /dev/null
}

restart_service() {
    if dinitctl list | grep -qF "[[+]     ] $1"; then
        dinitctl restart "$1"
    fi
}

op="$1"; shift

case $op in
  sysctl)   dinit_live; each_conf /usr/bin/sysctl -q -p ;;
  dbus_reload) dinit_live; reload_dbus ;;
    # For use by other packages
  reload)   dinit_live; /usr/bin/dinitctl reload "$@"; /usr/bin/dinitctl restart "$@" ;;
  restart)  dinit_live; restart_service "$1" ;;
  add)      svc_add_help ;;
  del)      svc_del_help ;;
  addU)      svc_user_add_help ;;
  delU)      svc_user_del_help ;;
  *) echo >&2 "  Invalid operation '$op'"; exit 1 ;;
esac

exit 0
