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

. /etc/rc.subr

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

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

load_rc_config $name
: ${grist_enable:=no}
: ${grist_user:="grist"}
: ${grist_group:="grist"}

logfile="/var/log/${name}/${name}.log"
pidfile="/var/run/${name}/${name}.pid"
workingdir="/usr/local/www/grist-core"
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/grist.conf && sandbox/run.sh'"

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

grist_precmd()
{
  # Ensure pid directory exists
  install -d -g "${grist_group}" -o "${grist_user}" "$(dirname "${pidfile}")"

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

  # Ensure document directory exists
  install -d -g "${grist_group}" -o "${grist_user}" "/var/db/grist"

  # Ensure virtualenv exists
  if [ ! -d "${venvdir}" ]; then
	  echo "Creating Python virtual environment..."
	  su -m "${grist_user}" -c "/usr/local/bin/python3.12 -m venv ${venvdir}" || return 1
  fi

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

grist_start()
{
  su -m ${grist_user} -c "${command} ${command_args}"
}

run_rc_command "$1"

