#!/bin/sh
# PROVIDE: spectrumknx
# REQUIRE: LOGIN
# KEYWORD: shutdown

. /etc/rc.subr

export PATH=$PATH:/usr/local/bin
export HOME=${workingdir}

name="spectrumknx"
rcvar="${name}_enable"

load_rc_config $name
: ${spectrumknx_enable:=no}
: ${spectrumknx_user:="%%SPECTRUMKNX_USER%%"}
: ${spectrumknx_group:="%%SPECTRUMKNX_GROUP%%"}
: ${spectrumknx_listen_ip:="localhost"}
: ${spectrumknx_listen_port:="8765"}

logfile="/var/log/${name}/${name}.log"
pidfile="/var/run/${name}/${name}.pid"
workingdir="%%WWWDIR%%"
venvdir="${workingdir}/venv"

command="/usr/sbin/daemon"
command_args="-H -o ${logfile} -t ${name} -P ${pidfile} \
	bash -c 'cd $workingdir && source venv/bin/activate && source /usr/local/etc/spectrumknx.conf && APP_VERSION="%%APP_VERSION%%" uvicorn main:app --host ${spectrumknx_listen_ip} --port ${spectrumknx_listen_port}'"

start_precmd="${name}_precmd"
start_cmd="${name}_start"

spectrumknx_precmd()
{
  # Ensure pid directory exists
  install -d -g "${spectrumknx_group}" -o "${spectrumknx_user}" "$(dirname "${pidfile}")"

  # Ensure log directory exists
  install -d -g "${spectrumknx_group}" -o "${spectrumknx_user}" "$(dirname "${logfile}")"

  # Ensure DB directory exists
  install -d -g "${spectrumknx_group}" -o "${spectrumknx_user}" -m 0750 "/var/db/spectrumknx"

  # Ensure virtualenv exists
  if [ ! -d "${venvdir}/bin" ]; then
	  echo "Creating Python virtual environment..."
	  mkdir -p "${venvdir}"
	  chown ${spectrumknx_user}:${spectrumknx_group} "${venvdir}"
	  su -m "${spectrumknx_user}" -c "%%PYTHON_CMD%% -m venv ${venvdir}" || return 1
  fi

  echo "Installing Python requirements..."
  su -m "${spectrumknx_user}" -c "cd ${workingdir} && ${venvdir}/bin/python -m pip install -r ${workingdir}/requirements.txt" || return 1
}

spectrumknx_start()
{
  su -m ${spectrumknx_user} -c "${command} ${command_args}"
}

run_rc_command "$1"

