#!/bin/bash

# Migre une install ScoDoc 7 vers ScoDoc 9
# Les données ScoDoc7 sauvegardées par save_scodoc7_data.sh
# sont copiés au bon endroit
# puis les bases SQL ScoDoc 7 sont traduites dans la base ScoDoc 9
#
# Fichiers de données et config locale:
#     archives, photos: /opt/scodoc/var/ => /opt/scodoc-data
#
#

set -euo pipefail

# Le répertoire de ce script:
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"

source "$SCRIPT_DIR/config.sh"
source "$SCRIPT_DIR/utils.sh"

cd "$SCODOC_DIR" || die "ScoDoc 9 non installe"
source "venv/bin/activate"

# Ce script doit tourner comme "root"
check_uid_root "$0"
# En principe, l'utilisateur "scodoc" existe déjà, mais au cas où on vérifie:
check_create_scodoc_user

# Usage
if [ ! $# -eq 1 ]
then
  echo "Usage: $0 directory"
  exit 1
fi

SCODOC7_HOME="$1" # racine de l'archive importée

#SCODOC7_HOME="/opt/scodoc7"
#SCODOC7_DIR="${SCODOC7_HOME}/Products/ScoDoc"

# if [ "${SRC##*.}" == "tgz" ] 
# then
#     if [ -e ${SRC%%.*} ]
#     then
#         echo "Error: ${SRC} is an archive but ${SRC%%.*} already exists"
#         exit 2
#     fi
#     echo "extracting archive ${SRC}..."
#     tar xvfz ...

# --- 2. Propriétaire des bases de données
# Bases appartenant à www-data:
#     inutile si on importe via pg_restore (voir restore-scodoc7_data.sh)
migrate_database_ownership() {
    SCO7_BASES=$(su -c "psql -l -t | grep www-data" "$POSTGRES_SUPERUSER" | awk -F '|' '{print $1}')
    for base in $SCO7_BASES
    do
    su -c "psql -c 'REASSIGN OWNED BY \"www-data\" TO scodoc;' $base" "$POSTGRES_SUPERUSER"
    done
    su -c "psql -c 'REASSIGN OWNED BY \"www-data\" TO scodoc;'" "$POSTGRES_SUPERUSER"
}

# --- 3. Fichiers locaux: /opt/scodoc/var => /opt/scodoc-data
migrate_local_files() {
    echo "Déplacement des fichiers de configuration et des archives"
    SCODOC_VAR_DIR_BACKUP="$SCODOC_VAR_DIR".bak
    if [ -e "$SCODOC_VAR_DIR_BACKUP" ]
    then
        die "supprimer ou déplacer $SCODOC_VAR_DIR_BACKUP avant de continuer"
    fi
    if [ -e "$SCODOC_VAR_DIR" ]
    then
        echo "renomme $SCODOC_VAR_DIR  en  $SCODOC_VAR_DIR_BACKUP"
        mv "$SCODOC_VAR_DIR" "$SCODOC_VAR_DIR_BACKUP"
    fi
    mkdir "$SCODOC_VAR_DIR" || die "erreur creation repertoire"
    mv "${SCODOC7_HOME}"/var/scodoc/* "$SCODOC_VAR_DIR" || die "migrate_local_files failed"

    # Anciens logs ScoDoc7
    old_logs_dest="$SCODOC_VAR_DIR/log/scodoc7"
    echo "Copie des anciens logs ScoDoc 7 dans $old_logs_dest"
    mkdir -p "$old_logs_dest" || die "erreur creation $old_logs_dest"
    mv "${SCODOC7_HOME}"/log/* "$old_logs_dest" || die "erreur mv"

    # Templates locaux poursuites etudes
    if [ -e "${SCODOC7_HOME}"/config/doc_poursuites_etudes/local ]
    then 
        mv "${SCODOC7_HOME}"/config/doc_poursuites_etudes/local "$SCODOC_VAR_DIR"/config/doc_poursuites_etudes || die "migrate_local_files failed to migrate doc_poursuites_etudes/local"
    fi
    # S'assure que le propriétaire est "scodoc":
    chown -R "${SCODOC_USER}:${SCODOC_GROUP}" "${SCODOC_VAR_DIR}" || die "change_scodoc_file_ownership failed on ${SCODOC_VAR_DIR}"
}


# ------ MAIN

change_scodoc_file_ownership

migrate_local_files
set_scodoc_var_dir

echo
echo "Les fichiers locaux de ScoDoc: configuration, photos, procès-verbaux..."
echo "sont maintenant stockées dans $SCODOC_VAR_DIR"
echo


# ----- Migration base utilisateurs
echo
echo "-------------------------------------------------------------"
echo "Importation des utilisateurs de ScoDoc7 dans ScoDoc 9 "
echo "(la base SCOUSERS de ScoDoc7 sera laissée inchangée)"
echo "(les utilisateurs ScoDoc 9 existants seront laissés inchangés)"
echo "-------------------------------------------------------------"
echo

su -c "(cd $SCODOC_DIR && flask import-scodoc7-users)" "$SCODOC_USER"


# ----- Migration bases départements
# les départements ScoDoc7 ont été déplacés dans /opt/scodoc-data/config/dept
for f in "$SCODOC_VAR_DIR"/config/depts/*.cfg
do
    dept=$(basename "${f%.*}")
    db_name=$(echo "SCO$dept" | tr "[:lower:]" "[:upper:]")
    echo
    echo "----------------------------------------------"
    echo "|     MIGRATION DU DEPARTEMENT $dept"
    echo "----------------------------------------------"
    su -c "(cd $SCODOC_DIR && flask import-scodoc7-dept $dept $db_name)" "$SCODOC_USER"
    echo "restarting postgresql server..."
    systemctl restart postgresql
done 

# Précaution a priori inutile (import-scodoc7-dept efface les caches)
systemctl restart redis


# Commande listant les nom des departement en DB:
# Liste des bases de données de département:
# dept_db=$(psql -l | awk '{print $1;}' | grep ^SCO | grep -v SCOUSERS | grep -v SCO8USERS | awk '{print substr($1,4);}')
