#!/bin/bash

LOGFILE="${WAZO_UPGRADE_ROOT:-}/var/log/wazo-upgrade.log"
DATEFORMAT="%Y-%m-%d_%H:%M:%S"
REAL_WAZO_UPGRADE="/usr/bin/real-wazo-upgrade"

check_package_is_available()
{
    local package=$1
    test $(apt-cache madison "$package" | grep 'Packages$' | wc -l) -ge 1
}

check_debian_mirror_is_available()
{
    if ! check_package_is_available bash ; then
        echo 'Could not find any Debian repository to download "bash" from. Check your /etc/apt/sources.list.'
        return 1
    fi
}

check_wazo_mirror_is_available()
{
    if ! check_package_is_available wazo-upgrade ; then
        echo 'Could not find any Wazo repository to download "wazo-upgrade" from. Check your /etc/apt/sources.list.d or run "wazo-dist -m pelican-bookworm".'
        return 1
    fi
}

run_upgrade()
{
    apt-get update -o DPkg::Lock::Timeout=15 > /dev/null
    check_debian_mirror_is_available || return 1
    check_wazo_mirror_is_available || return 1
    echo "Upgrading wazo-upgrade"
    apt-get install -o DPkg::Lock::Timeout=15 -y wazo-upgrade

    "$REAL_WAZO_UPGRADE" "$@"
}

append_log_start()
{
    logfile=$1
    cat >> $logfile <<-EOF

	===========================================
	wazo-upgrade started at $(date +$DATEFORMAT)
	===========================================

	EOF
}

append_log_end()
{
    logfile=$1
    cat >> $logfile <<-EOF

	===========================================
	wazo-upgrade stopped at $(date +$DATEFORMAT)
	===========================================

	EOF
}

log_and_upgrade()
{
    local status

    append_log_start $LOGFILE
    set -o pipefail  # report the upgrade status, not the one of tee
    run_upgrade "$@" |& tee -a $LOGFILE
    status=$?
    set +o pipefail
    append_log_end $LOGFILE
    return $status
}

# Allows the tests to source this file without side effects
if [ "${BASH_SOURCE[0]}" = "$0" ]; then
    PATH=/bin:/usr/bin:/sbin:/usr/sbin
    log_and_upgrade "$@"
fi
