#!/bin/bash
TestEnv() {

	Check=$(which $1 2> /dev/null) 
	if [[ -z ${Check} ]]
		then
			echo "$1 not found ... "	
			exit 1
	fi


}

Res() {
	if [[ $1 -eq 0 ]]
		then
			echo "$(tput setaf 2)OK$(tput sgr0)"
		else
			echo "$(tput setaf 1)FAILED$(tput sgr0)"
	fi

}


LinkESL() {

	while [[ ! -d ${DirLink} ]]
		do
			read -p "Absolute path of ESL Programe or ESL Product : " DirLink
		done
	[[ -L $(dirname $0)/cible ]] && rm -f $(dirname $0)/cible &> /dev/null
	echo -n "ESL symbolic link : "
	ln -s ${DirLink} $(dirname $0)/cible &> /dev/null && echo OK || echo FAILED
}

help () {
	echo "
$0 [image-gen/image-repo/link/repo/gen/run-repo/run-gen/import-image/save-image]

	* $(tput setaf 3)image-gen	$(tput sgr0): Generate docker image for esl compilator
	* $(tput setaf 3)image-repo	$(tput sgr0): Generate docker image  for repository sync 
	* $(tput setaf 5)link		$(tput sgr0): Create symbolic link to ESL Programe or Porduct
	* $(tput setaf 4)repo		$(tput sgr0): start docker compose and generate repositories
	* $(tput setaf 4)gen		$(tput sgr0): start docker compose and generarte esl
	* $(tput setaf 2)run-gen	$(tput sgr0): Connect and run bash on instance gen
	* $(tput setaf 2)run-repo 	$(tput sgr0): Connect and run bash on instance repo
	* $(tput setaf 6)import-image 	$(tput sgr0): Import last backuped docker image in ./images/
	* $(tput setaf 6)save-image	$(tput sgr0): backup docker image in ./images/

"
exit 

}



DeleteFile() {

	echo -n "Delete Dockerfile ... : "
	[[ -f ${Wai}/Dockerfile ]] && rm Dockerfile || true
	Res $?


}

DockerConnect() {

	User=esl
	[[ "$2" == "root" ]] && User='root'
	Inst=$(docker ps|grep "esl-$1" | awk '{print $NF}')
	[[ -L $(realpath $(dirname $0))/cible ]] && Cible="-v $(realpath $(dirname $0))/cible:/data/cible"
	[[ -z "${Inst}" ]] && docker run -ti -v $(realpath $(dirname $0))/data:/data -v $(realpath $(dirname $0))/data/log:/log ${Cible} --hostname $1 -u ${User}  esl\-${1}:2 bash || docker exec -ti -u $User ${Inst} bash 

}
DockerPs() {

	docker ps|grep $(dirname .)_esl\-$1 | awk '{print $NF}'

}



DockerStop() {
	for DockerRun in $(docker ps|grep esl\- | awk '{print $NF}')
		do
			echo -n "Stop $DockerRun ... :"
			docker stop $DockerRun &> /dev/null
			Res $?
		done
}

DeleteImg () {
	DeleteFile
	echo -n "Delte old images $1 ... : " 
	for var in $(docker image ls| grep  "esl-$1"   | awk '{print $3}'); do yes | docker image rm $var --force; done &> /dev/null
	Res $?
}

DockerGen() {
	DeleteImg $1
	echo -n "generate Dockerfile $1 $Cible... : "
	source define.conf
	while read line
		do
			if [[ ! -z $(echo $line | grep '\$') ]]
				then
					eval echo ${line} | sed  "s#\[#\[\'#g" | sed "s#\]#\'\]#g"
				else
					echo $line
			fi
        done < Template/Dockerfile.${1}.${Cible} > Dockerfile
	Res $?

	echo -n "Generate $1  Docker image ... : "
	docker build --no-cache . -t esl-$1:${GenVers} 2>&1 | tee /tmp/BuildDocker-${1}.log &> /dev/null 
	Res $?

	echo "
------ Log Compil -----------
/tmp/BuildDocker-${1}.log
-----------------------------
"

}


DockerComposeRun () {
	echo "
------ Log Compil -----------
/tmp/GetRepo-${1}.log
-----------------------------
"



	[[ -f ${Wai}/docker-compose.yml ]] && rm -f ${Wai}/docker-compose.yml
	[[ "$2" == "Print" ]] && Print="-d" || Print=""
	cp ${Wai}/Template/docker-compose.yml.$1 ${Wai}/docker-compose.yml
	echo "Log is : log/${1} - use tail -f ./log/$1"
	[[ -L $(realpath $(dirname $0))/cible ]] && Cible="-v $(realpath $(dirname $0))/cible:/data/cible"
	docker run -ti -v $(realpath $(dirname $0))/data:/data -v $(realpath $(dirname $0))/data/log:/tmp/log ${Cible} -u esl --hostname $1  esl\-${1}:2 /usr/local/bin/${1}.sh
	#yes | docker-compose  up  ${Print} --remove-orphans 1>&1 | tee /tmp/RunDocker-${1}.log &> /dev/null
	##yes | docker-compose  up ${Print} --remove-orphans
	Res $?
	echo "
--------- Log Esl -----------
/tmp/RunDocker-${1}.log
-----------------------------
"
}


DockerSave () {

	for Image in $(docker image ls | grep -E "^esl-repo|^esl-gen" | awk '{print $1":"$2}')
		do
			EslImage=$(echo $Image | cut -d":" -f1)
			EslImageVersion=$(echo $Image | cut -d":" -f2)
			echo -ne "Save $Image : "
			docker save $Image | gzip > $(dirname $0)/images/${EslImageVersion}-$(date +%Y%m%d)_$(echo $Image | sed 's/:/-/g').gz
			[[ "$?" -eq 0 ]] && echo OK || echo FAILED  
		done

}
DockerImport () {

	if [[ $(ls -1 images | grep "esl-"| wc -l) -eq 0 ]]
		then
			echo "Nothing todo ..."
		else
			for Type in repo gen
				do
					GetImage=$(ls -1 images | grep $Type |sort -r -n -t"-" -k1,2 | head -n1)
					echo -ne "Import $GetImage : "
					zcat images/$GetImage | docker load &> /dev/null
					[[ "$?" -eq 0 ]] && echo OK || echo FAILED  
				done
	fi

}



#GenAll () {
#	DockerGen gen
#	DockerGen repo
#}

