#!/bin/bash

OLD_VERS="14"
NEW_VERS="16"

path_postgresql="$(CreoleGet container_path_postgresql '')"
if ! [ -x "${path_postgresql}/usr/bin/pg_dropcluster" ];then
    exit 0
fi

if [ -f /etc/eole/upgrade_postgresql.lock ]; then
    . /usr/lib/eole/ihm.sh
    EchoOrange "Migration annulée"
    rm -f /etc/eole/upgrade_postgresql.lock
    exit 0
fi
# réinstaller postgis si eole-postgis est installé et les extensions postgresql précédemment désinstallées
OLD_PACKAGES="$(dpkg-query -W -f='${Package}\t${Status}\n' eole-postgis | awk '/ok installed/ {print $1}')"
if [ -e "/tmp/Upgrade-Auto/postgresql-extensions.txt" ];
then
    EXTENSIONS="$(cat /tmp/Upgrade-Auto/postgresql-extensions.txt)"
else
    EXTENSIONS=""
fi

if [ -n "${OLD_PACKAGES}" ]; then
    POSTGIS=true
    # reinstallation de postgis
    apt -y -f install eole-postgis-pkg
    # restauration de postgis pour l'ancienne version
    cd /tmp/Upgrade-Auto/postgis
    find -type f|while read a; do
        if [ -e /$a ]; then
            # fichier encore disponible après upgrade, ne rien faire
            rm -f $a
        else
            mkdir -p /$(dirname $a)
            cp -nf $a /$a
        fi
    done
    cd - > /dev/null
    su - postgres -c "psql -c \"CREATE EXTENSION postgis;\""
else
    POSTGIS=false
fi

if [ -n "${EXTENSIONS}" ]; then
    POSTGRESQL_EXTENSIONS=true
    cd /tmp/Upgrade-Auto/postgresql-extensions
    find -type f|while read a; do
        if [ -e /$a ]; then
            # fichier encore disponible après upgrade, ne rien faire
            rm -f $a
        else
            mkdir -p /$(dirname $a)
            cp -nf $a /$a
        fi
    done
    cd - > /dev/null
    for extension_package in $EXTENSIONS
    do
        new_package=${extension_package/${OLD_VERS}/${NEW_VERS}}
	    #installation
        apt -y -f install $new_package
	    #creation de l’extension avec psql
        extension=${new_package#postgresql-${NEW_VERS}-}
        extension=${extension/-/_}
        su - postgres -c "psql -c \"CREATE EXTENSION ${extension};\""

    done
else
    POSTGRESQL_EXTENSIONS=false
fi

#affiche la liste des clusters actuels
CreoleRun "pg_lsclusters" postgresql
found=$(CreoleRun "pg_lsclusters -h" postgresql|awk '{ print $1 }'|while read a; do if [ "$a" = "$OLD_VERS" ]; then echo "found"; fi; done)
if [ -z "$found" ]; then
    echo "impossible de trouver un cluster en version $OLD_VERS"
    echo "aucune migration n'est effectuée"
    exit 0
fi

# Rédémarrage de postgresql pour éviter les erreurs :
# could not look up local user ID 126: user does not exist
CreoleRun "systemctl restart postgresql@${OLD_VERS}-main.service" postgresql

# Suppression du nouveau cluster créé automatiquement
CreoleRun "pg_dropcluster --stop ${NEW_VERS} main" postgresql

# Mise à niveau du cluster avec pg_upgradeclustepg_upgradecluster main
CreoleRun "pg_upgradecluster -v ${NEW_VERS} ${OLD_VERS} main" postgresql

# Vérification que le cluster est bien mis à jour

# suppression de l'ancien cluster
CreoleRun "pg_dropcluster --stop ${OLD_VERS} main" postgresql

# désintallation de l'ancienne version postgresql
if [ "$POSTGIS" = true ]; then
    cd /tmp/Upgrade-Auto/postgis
    find -type f|while read a; do
         rm -f /$a
    done
    cd - > /dev/null
fi
if [ "$POSTGRESQL_EXTENSIONS" = true ]; then
    cd /tmp/Upgrade-Auto/postgresql-extensions
    find -type f|while read a; do
         rm -f /$a
    done
    cd - > /dev/null
fi
OLD_PACKAGES="$(CreoleRun "dpkg-query -W -f='${Package}\t${Status}\n' postgresql*-${OLD_VERS} | awk '/ok installed/ {print $1}'" postgresql)"
if [ -n "${OLD_PACKAGES}" ]; then
	CreoleRun "apt -y remove ${OLD_PACKAGES}" postgresql
fi

# s’assurer que postgresql est démarré
CreoleRun "systemctl start postgresql" postgresql

exit 0
