#!/bin/sh

# runsvdir default if missing
SVDIR="${SVDIR:-/etc/service}"
SERVICE_SOURCE="$(dirname "$SVDIR")/sv"

check_service_name(){
    local SERVICE_NAME="${1}"
    
    # If service name is not valid (empty or with spaces), don't continue
    if [ -z "$SERVICE_NAME" ] || [ $(echo $SERVICE_NAME | grep -c " ") -gt 0 ]; then
        return 1
    fi
}

symlink_dependency(){
    local SERVICE_NAME="${1}"
    local SERV_PATH SV_R_PATH
    SERV_PATH="${SVDIR}/${SERVICE_NAME}"
    SV_R_PATH="${SERVICE_SOURCE}/${SERVICE_NAME}"
    # Check for missing run executable
    if [ ! -e "$SERV_PATH" ] && [ -x "${SV_R_PATH}/run" ]; then
        ln -sf "$SV_R_PATH" "$SERV_PATH"
        sleep 1.5
    fi
}

check_dependency(){
    local SERVICE_NAME="${1}"
    # Check if service already running
    if [ $(sv status "$SERVICE_NAME" | grep -c "^run:") -gt 0 ]; then
		echo "service dbus is running"
        return 1
    fi
}

start_dependency(){
    local SERVICE_NAME="${1}"
    check_service_name "$SERVICE_NAME" || return 1
    
    check_dependency "$SERVICE_NAME" && sv start "$SERVICE_NAME" || true
}

force_dependency(){
    local SERVICE_NAME="${1}"
    check_service_name "$SERVICE_NAME" || return 1
    
    # Create the dependency symlink if it is missing
    symlink_dependency "$SERVICE_NAME"
    
    start_dependency "$SERVICE_NAME"
    
    # Exit if service fails to be detected
    sv check "$SERVICE_NAME" || exit 170
}
