#!/usr/bin/env bash

# Configure the script to exit when a command fails.
set -e

: ${SCRIPTS_ROOT:="$(dirname $0)"/../../scripts}
export SCRIPTS_ROOT
source "${SCRIPTS_ROOT:?}"/util.sh

# ===== CONSTANTS =====

LOCAL_RUN_DIR="${REPOSITORY_ROOT:?}"/local-run
SELF_SCRIPTS="${LOCAL_RUN_DIR:?}"/scripts
source "${SELF_SCRIPTS:?}"/constants.sh

# ===== MAIN LOGIC =====

update-one() {
	SCENARIO_NAME="${1:?}"
	[ "${SCENARIO_NAME:?}" == "${DEFAULT_SCENARIO_NAME:?}" ] && return
	if ! [ -d "${SCENARIOS_DIR:?}"/"${SCENARIO_NAME:?}" ]; then
		warn "Scenario $(format_code "${SCENARIO_NAME:?}") doesn’t exist"
		return
	fi

	trace "Updating scenario $(format_code "${SCENARIO_NAME:?}")…"
	edo cp "${SCENARIOS_DIR:?}"/{"${DEFAULT_SCENARIO_NAME:?}","${SCENARIO_NAME:?}"}/prosody/config/prosody.bootstrap.cfg.lua
	edo cp -Rf "${SCENARIOS_DIR:?}"/{"${DEFAULT_SCENARIO_NAME:?}","${SCENARIO_NAME:?}"}/prosody/config/certs/
}

if [ $# == 0 ]; then
	info 'Updating all scenarios…'
	for name in $(task local:scenarios:list); do
		update-one "$name"
	done
elif [ $# == 1 ]; then
	info "Updating scenario ${1?}"
	update-one "${1:?}"
else
	SCENARIOS=("$@")
	info "Updating scenarios ${SCENARIOS[*]}"
	for name in "${SCENARIOS[@]}"; do
		update-one "$name"
	done
fi
