#!/bin/bash

KAZ_ROOT=$(cd "$(dirname $0)/.."; pwd)
. "${KAZ_ROOT}/bin/.commonFunctions.sh"
setKazVars
. $DOCKERS_ENV

cd "${KAZ_ROOT}"

NEW_DIR="secret"
TMPL_DIR="secret.tmpl"
SORTIESTANDARD=1	
DIR=$KAZ_KEY_DIR
ORGA=

if [ ! -d "${NEW_DIR}/" ]; then
    rsync -a "${TMPL_DIR}/" "${NEW_DIR}/"
fi

usage() {
echo "${PRG} [OPTIONS] [filename ...] 
	# PARCOURE LES ENV FILE ET REMPLIT LES --clean_val-- qui n'ont pas été complétés.
	on cherche des 
	@@pass@@***@@p@@ 			-> on génère un mot de passe 16car (les *** permettent d'identifier le mot de passe, s'il doit être utilisé ailleurs)
	@@db@@***@@d@@					-> on génère une base de données (pareil identifié par ***)
	@@user@@***@@u@@				-> on génère un user
	@@token@@***@@t@@			-> on génère un token
	@@globalvar@@***@@gv@@ 	-> on cherche la variable globale ***
	@@crossvar@@envname_varname@@cv@@	-> on retrouve la variable dans les envfiles

	Si on précise des fichiers, alors il ne remplace que dans ceux là (et on "lie" les clean-val ensemble !!!)
OPTIONS 
 -h|--help            Cette aide :-)
 -n|--simu            SIMULATION
 -q|--quiet           Sans bruits de fond
 -d foldername        prend les envfiles dans un sous dossier /kaz/secret/orgas/foldername/ (pour les orgas !) 
 -

"
}

for ARG in "$@"; do
    if [ -n "${DIRECTORYARG}" ]; then # après un -d
		DIR=$KAZ_KEY_DIR/orgas/${ARG}
		ORGA=${ARG}
        DIRECTORYARG=
    else

      case "${ARG}" in
          '-d' | '--directory' | '-f' | '--folder' | '--foldername')
              DIRECTORYARG="ON ATTEND UN REPERTOIRE APRES CA" ;;
          '-h' | '--help' )
            usage && exit ;;
          '-n' | '--simu')
            SIMU="echo" ;;
          '-q' | '--quiet')
            SORTIESTANDARD="/dev/null" ;;
          *)
            ENVFILES="${ENVFILES} ${ARG%}";;
      esac
    fi
done

NB_FILES=$(echo "${ENVFILES}" | wc -w )

if [[ $NB_FILES = 0 ]]; then
	ENVFILES=$(grep -lE '@@pass@@|@@db@@|@@user@@|@@token@@|@@globalvar@@|@@crossvar@@' $DIR/* | sed 's/.*\///')   # 
fi



secretGen(){
	# $1	Le env-file à compléter

	FILENAME=$DIR/$1

	NBMATCH=$(grep -lE '@@pass@@|@@db@@|@@user@@|@@token@@|@@globalvar@@' $FILENAME | wc -l)   # est ce qu'il y a des choses à génrérer
	if [[ $NBMATCH = 0 ]]; then
		true
		# rien à faire dans ce fichier, on passe
	else
		echo "Remplissage $FILENAME" >& $SORTIESTANDARD
		db="$(apg -n 1 -m 2 -M NCL | cut -c 1-2)"
		pass="$(apg -n 1 -m 16 -M NCL)"
		token="$(apg -n 1 -m 32 -M NCL)"
		user="$(apg -n 1 -m 2 -M NCL | cut -c 1-2)"

		dbs=$(grep -Eo '@@db@@[^@]*@@d@@' $FILENAME | sed -e 's/@@db@@//' -e 's/@@d@@//')
		passwords=$(grep -Eo '@@pass@@[^@]*@@p@@' $FILENAME | sed -e 's/@@pass@@//' -e 's/@@p@@//')
		tokens=$(grep -Eo '@@token@@[^@]*@@t@@' $FILENAME | sed -e 's/@@token@@//' -e 's/@@t@@//')
		users=$(grep -Eo '@@user@@[^@]*@@u@@' $FILENAME | sed -e 's/@@user@@//' -e 's/@@u@@//')
		globalvars=$(grep -Eo '@@globalvar@@[^@]*@@gv@@' $FILENAME | sed -e 's/@@globalvar@@//' -e 's/@@gv@@//')

		for dbName in $dbs; do $SIMU sed -i "s/@@db@@$dbName@@d@@/${dbName}_$db/"  $DIR/*; done
		for pw in $passwords; do $SIMU sed -i "s/@@pass@@$pw@@p@@/${pass}/"  $DIR/*; done
		for tk in $tokens; do $SIMU sed -i "s/@@token@@$tk@@t@@/${token}/"  $DIR/*; done
		for u in $users; do $SIMU sed -i "s/@@user@@$u@@u@@/${u}_$user/"  $DIR/*; done
		for var in $globalvars; do $SIMU sed -i "s/@@globalvar@@$var@@gv@@/${!var}/"  $DIR/*; done
	fi

}



crossVarComplete(){
	# $1	Le env-file à compléter

	FILENAME=$DIR/$1

	NBMATCH=$(grep -lE '@@crossvar@@' $FILENAME | wc -l)   # est ce qu'il y a des cross-var à récupérer
	if [[ $NBMATCH = 0 ]]; then
		true
		# rien à faire dans ce fichier, on passe
	else
		echo "Remplissage $FILENAME" >& $SORTIESTANDARD

		. $$DIR/env-$envname

		varnames=$(grep -Eo '@@crossvar@@[^@]*@@cv@@' $FILENAME | sed -e 's/@@crossvar@@//' -e 's/@@cv@@//')
		for varname in $varnames; do 
			envname=${varname%%_*}
			$SIMU sed -i "s/@@crossvar@@$varname@@cv@@/${!varname}/"  $DIR/*; 
		
		done

	fi

}


for ENVFILE in $ENVFILES; do
	secretGen "$ENVFILE"
done


for ENVFILE in $ENVFILES; do
	crossVarComplete "$ENVFILE"
done

exit 0
