#!/bin/bash

#shellcheck disable=SC1091
source /usr/bin/xivo-upgrade-functions

CUSTOM_ENV_FILE="/etc/docker/compose/custom.env"
PGXIVOCC_CONTAINER="xivocc-pgxivocc-1"

wait_for_pgxivocc() {
    until docker exec "${PGXIVOCC_CONTAINER}" pg_isready -q; do
        sleep 1
    done
}

get_media_server_names() {
    docker exec "${PGXIVOCC_CONTAINER}" psql -U postgres -d xivo_stats -qtAc \
        "SELECT name FROM mediaserver WHERE name <> 'default' ORDER BY name"
}

get_declared_media_server_hosts() {
    grep -oP '^\s*MDS_HOSTS\s*=\s*\K.*' "${CUSTOM_ENV_FILE}" | tail -n 1
}

display_undeclared_media_servers_warning() {
    local media_server_names="${1}"; shift

	cat <<-EOF
	************************************************************************
	*  WARNING: the media servers cannot replicate their statistics to     *
	*  this XiVO CC until their IP addresses are declared.                 *
	*  Media servers found:                                                *
	$(echo "${media_server_names}" | sed 's/^/*    - /')
	*  Add their IP addresses to MDS_HOSTS (comma-separated) in            *
	*  ${CUSTOM_ENV_FILE}, then run: xivocc-dcomp reload pgxivocc
	*  No statistics are lost: they are replicated once access is open.    *
	************************************************************************
	EOF
}

warn_if_media_servers_are_undeclared() {
    local media_server_names

    wait_for_pgxivocc
    media_server_names=$(get_media_server_names)
    if [ -n "${media_server_names}" ] && [ -z "$(get_declared_media_server_hosts)" ]; then
        display_undeclared_media_servers_warning "${media_server_names}"
    fi
}

check_used_postgres "xivocc"
if [[ "$USE_DB" == true ]]; then
    warn_if_media_servers_are_undeclared
fi
