#!/bin/bash

# shellcheck disable=SC1091
source /etc/os-release

function implode() {
  local d=${1-} f=${2-}
  if shift 2; then
    printf %s "$f" "${@/#/$d}"
  fi
}

active_calls_count() {
  { asterisk -rx "core show channels verbose" || exit 1; } | grep 'active calls'|awk '{print $1}'
}

enter_to_continue() { echo -n "[Press ENTER to continue]"; read -r; echo; }


echo "Ensure their is no active call in Asterisk..."
active_calls=$(active_calls_count)
while [[ "$active_calls" -gt 0 ]]; do
	echo "$active_calls active calls detected, waiting..."
	sleep 1
	active_calls=$(active_calls_count)
done
echo "No active call detected"
enter_to_continue

echo "Detect currently installed version..."
CUR_VER=$(dpkg-query -W -f='${Version}\n' asterisk)
echo "Current version: $CUR_VER"
enter_to_continue

echo "List EE asterisk installed packages..."
mapfile -t packages < <( dpkg-query -W -f='${Package}\t${Version}\n' | grep asterisk | grep -w "$CUR_VER" | cut -f1 )
[[ "${#packages[@]}" -gt 0 ]] || exit 1
echo "${#packages[@]} EE asterisk packages installed: ${packages[*]}"
enter_to_continue

echo "Update APT cache..."
apt update
enter_to_continue

echo "Detect candidate version..."
CAN_VER=$(apt-cache madison asterisk | awk '{print $3}' | grep "+eepatch" | head -n 1)
[[ -n "$CAN_VER" ]] || exit 1
echo "Candidate version: $CAN_VER"
enter_to_continue

echo "Unhold EE asterisk installed packages..."
apt-mark unhold "${packages[@]}" || exit 1
enter_to_continue

echo "Upgrade EE asterisk installed..."
apt install --upgrade -t "${VERSION_CODENAME}-ee" "${packages[@]}"
enter_to_continue

echo "Hold EE asterisk installed packages..."
apt-mark hold "${packages[@]}" || exit 1

echo Stop.
