#!/bin/bash

# This script reindex asterisk db
# This is specificallly for PG11.18 upgrade (see #6222)
# But it might be use for future db migration that would need it too

reindex_db() {
    local dbname="${1}"; shift

    psql -U asterisk -qtAc "REINDEX DATABASE ${dbname}"
}

fix_group_pickup_extension_duplicate() {
    psql -U asterisk asterisk -tAc "DELETE FROM extensions WHERE id IN (select min(id) from extensions where exten = '*8')"
}

reindex_db_after_pgupgrade() {
    local version_before_upgrade="${1}"; shift

    # Handle reindex for PG 11.18 upgrade (see #6222)
    echo ""
    echo " * Upgrade to PG11.18 (deb11):"
    echo " *****************************"
    echo " - reindexing asterisk database ..."
    if reindex_db "asterisk"; then
        echo " - reindexing asterisk finished with success !"
        echo ""
        return 0
    fi

    # Handle specific case of upgrade from Izar.10
    if dpkg --compare-versions "$version_before_upgrade" ">=" "2022.05.10"; then
        echo " - Upgrading from $version_before_upgrade: fixing duplicate in extensions table"
        fix_group_pickup_extension_duplicate
        echo " - duplicate fix succeeded!"
        echo ""
        echo " - reindexing asterisk database after duplicate fix ..."
        echo ""
        if reindex_db "asterisk"; then
            echo " - reindexing asterisk finished with success !"
            echo ""
            return 0
        else
            echo " - reindexing asterisk FAILED !"
            echo ""
            return 1
        fi
    fi
}


if dpkg --compare-versions "$XIVO_VERSION_INSTALLED" "<<" "2022.10.05"; then
    if reindex_db_after_pgupgrade "$XIVO_VERSION_INSTALLED"; then
        echo "XIVO_UPGRADE_REINDEX_DB_ERROR=0" >> "${XIVO_UPGRADE_STATUS_FILE}"
    else
        echo "XIVO_UPGRADE_REINDEX_DB_ERROR=1" >> "${XIVO_UPGRADE_STATUS_FILE}"
    fi
    exit 0
else
    exit 0
fi