#!/usr/bin/env bash

echo "
####################################################################################################
#
#  Génération d'une partie des scripts SQL permettant de créer de zéro la base de données de SyGAL
#
####################################################################################################"

THIS_DIR=$(cd `dirname $0` && pwd)

# répertoire de destination des résultats
OUTPUT_DIR=/tmp/sygal-doc/database
[[ -d ${OUTPUT_DIR} ]] && echo "Le répertoire de destination existe déjà : ${OUTPUT_DIR}" && exit 1
mkdir -p ${OUTPUT_DIR}

# fonction remplaçant 'SYGAL.' par '/*SYGAL.*/' et '"SYGAL".' par '/*"SYGAL".*/' dans le fichier spécifié
commentPrefixInFile() {
    sed -i 's/\(SYGAL\.\)/\/*\1*\//ig' $1
    sed -i 's/\("SYGAL"\.\)/\/*\1*\//ig' $1
}
# fonction remplaçant par exemple "/*HISTO::*/1234" par "$2/*SUBSTIT*/" dans le fichier spécifié en $1
replaceHistoIdInFile() {
    sed -i "s/\/\*HISTO::\*\/[0-9]\+/$2\/\*SUBSTIT\*\//ig" $1
}

echo
##########################################################################
# Script de vidage de la bdd existante
##########################################################################"
FROM_FILE_PATH="/tmp/oracle-clear-schema-SYGAL.sql"
TO_FILE_PATH="${OUTPUT_DIR}/00-oracle-clear-schema-SYGAL.sql"
docker exec \
    -it \
    -w /app \
    sygal-container \
    php public/index.php generate-script-for-schema-clearing \
        --connection=doctrine.connection.orm_default && \
docker cp sygal-container:${FROM_FILE_PATH} ${TO_FILE_PATH} && \
commentPrefixInFile ${TO_FILE_PATH} && \

echo
###########################################################################
# Script de création des objets de la bdd, sans les contraintes de réf
###########################################################################"
FROM_FILE_PATH="/tmp/oracle-generate-schema-SYGAL-from-SYGAL.sql"
TO_FILE_PATH="${OUTPUT_DIR}/00-oracle-generate-schema-SYGAL.sql"
docker exec \
    -it \
    -w /app \
    sygal-container \
    php public/index.php generate-script-for-schema-creation \
        --src-connection=doctrine.connection.orm_default \
        --dst-connection=doctrine.connection.orm_default \
        --ref-constraints-included=0 && \
docker cp sygal-container:${FROM_FILE_PATH} ${TO_FILE_PATH} && \
commentPrefixInFile ${TO_FILE_PATH} && \
sed -i 's/\(START WITH [0-9]\+\)/\/*\1*\//ig; s/\(CACHE [0-9]\+\)/\/*\1*\//ig' \
    ${TO_FILE_PATH}

echo
###########################################################################
# Scripts d'insertions de données
###########################################################################"
FROM_FILE_PATH="/tmp/inserts"
TO_FILE_PATH="${OUTPUT_DIR}/02-inserts"
TABLES="CATEGORIE_PRIVILEGE,DOMAINE_SCIENTIFIQUE,IMPORT_OBSERV,INFORMATION,NATURE_FICHIER,PRIVILEGE,PROFIL,PROFIL_PRIVILEGE,TYPE_STRUCTURE,TYPE_VALIDATION,VERSION_FICHIER,WF_ETAPE"
HISTO_ID_SUBSTIT=1 # valeur forcée pour les colonnes d'historique
echo "FROM=${FROM_FILE_PATH} TO=${TO_FILE_PATH}"
rm -rf ${TO_FILE_PATH} && mkdir -p ${TO_FILE_PATH} && \
docker exec \
    -it \
    -w /app \
    sygal-container \
    php public/index.php generate-scripts-for-data-inserts \
        --src-connection=doctrine.connection.orm_default \
        --dst-connection=doctrine.connection.orm_default \
        --tables=${TABLES} \
        --output-dir=${FROM_FILE_PATH} && \
docker cp sygal-container:${FROM_FILE_PATH}/. ${TO_FILE_PATH} && \
for f in ${TO_FILE_PATH}/*; do commentPrefixInFile ${f}; replaceHistoIdInFile ${f} ${HISTO_ID_SUBSTIT}; done

echo
###########################################################################
# Script de création des contraintes de références
###########################################################################"
FROM_FILE_PATH="/tmp/oracle-generate-ref-constraints-SYGAL-from-SYGAL.sql"
TO_FILE_PATH="${OUTPUT_DIR}/03-oracle-generate-ref-constraints-SYGAL.sql"
docker exec \
    -it \
    -w /app \
    sygal-container \
    php public/index.php generate-script-for-ref-constraints-creation \
        --src-connection=doctrine.connection.orm_default \
        --dst-connection=doctrine.connection.orm_default && \
docker cp sygal-container:${FROM_FILE_PATH} ${TO_FILE_PATH} && \
commentPrefixInFile ${TO_FILE_PATH}


echo
echo "> Terminé."
echo "> Résultat dans ${OUTPUT_DIR}."
