#!/command/with-contenv /usr/bin/bash
# shellcheck shell=bash

declare -r log_prefix="[init-db-wait]"

wait_for_postgres() {
	local attempt_num=1
	local -r max_attempts=5

	echo "${log_prefix} Waiting for PostgreSQL to start..."

	local -r host="${PAPERLESS_DBHOST:-localhost}"
	local -r port="${PAPERLESS_DBPORT:-5432}"
	local -r user="${PAPERLESS_DBUSER:-paperless}"

	# Disable warning, host and port can't have spaces
	# shellcheck disable=SC2086
	while [ ! "$(pg_isready -h ${host} -p ${port} --username ${user})" ]; do

		if [ $attempt_num -eq $max_attempts ]; then
			echo "${log_prefix} Unable to connect to database."
			exit 1
		else
			echo "${log_prefix} Attempt $attempt_num failed! Trying again in 5 seconds..."
		fi

		attempt_num=$(("$attempt_num" + 1))
		sleep 5
	done
	# Extra in case this is a first start
	sleep 5
	echo "Connected to PostgreSQL"
}

wait_for_mariadb() {
	echo "${log_prefix} Waiting for MariaDB to start..."

	local -r host="${PAPERLESS_DBHOST:=localhost}"
	local -r port="${PAPERLESS_DBPORT:=3306}"

	local attempt_num=1
	local -r max_attempts=5

	# Disable warning, host and port can't have spaces
	# shellcheck disable=SC2086
	while ! true > /dev/tcp/$host/$port; do

		if [ $attempt_num -eq $max_attempts ]; then
			echo "${log_prefix} Unable to connect to database."
			exit 1
		else
			echo "${log_prefix} Attempt $attempt_num failed! Trying again in 5 seconds..."

		fi

		attempt_num=$(("$attempt_num" + 1))
		sleep 5
	done
	echo "Connected to MariaDB"
}

if [[ "${PAPERLESS_DBENGINE}" == "mariadb" ]]; then
	echo "${log_prefix} Waiting for MariaDB to report ready"
	wait_for_mariadb
elif [[ -n "${PAPERLESS_DBHOST}" ]]; then
	echo "${log_prefix} Waiting for postgresql to report ready"
	wait_for_postgres
fi

	echo "${log_prefix} Database is ready"
