#!/usr/bin/env bash
set -x

NGINX_NETWORK="$(docker network ls | grep nginx | awk '{print $2}')"
JSON_FILE="docker-compose2.json"
YAML_FILE="docker-compose2.yml"
WORKDIR="/tmp"

declare -A DOCKER_OPT
DOCKER_OPT[7]='.["version"] = '2''
# redis
DOCKER_OPT[6]='.["services"] += { "redis":{ "restart": "always", "image": "sameersbn/redis:4.0.9-2", "command": [ "--loglevel warning" ], "volumes": [ "redis-data:/var/lib/redis:Z" ]}}'

# postgresql
DOCKER_OPT[5]='.["services"] += { "postgresql": { "restart": "always", "image": "sameersbn/postgresql:10-2", "volumes": [ "postgresql-data:/var/lib/postgresql:Z" ], "environment": [ "DB_USER=gitlab", "DB_PASS=mlpfinsonik", "DB_NAME=gitlabhq_production", "DB_EXTENSION=pg_trgm" ] }}'

# gitlab
DOCKER_OPT[4]='.["services"] += { "gitlab": { "restart": "always", "image": "sameersbn/gitlab:12.7.6", "depends_on": [ "redis", "postgresql" ], "ports": [ "10080:80", "10022:22", "10443:443" ], "volumes": [ "gitlab-data:/home/git/data:Z" ]}}'
DOCKER_OPT[3]='.["services"] += { "gitlab": { "environment": }}' 

# volumes
DOCKER_OPT[2]='.["volumes"] += { "redis-data": null, "postgresql-data": null, "gitlab-data": null }'

#networks
DOCKER_OPT[1]='.["networks"] += { "default": { "external": { "name": "'${NGINX_NETWORK}'" }}}'



if [ ! -f ${WORKDIR}/${JSON_FILE} ]
then
	echo "{}" > ${WORKDIR}/${JSON_FILE}
else
	echo "${WORKDIR}/${JSON_FILE} exists."
fi

# Count through the number of array elements, using ${#
# looking for one missing.
for ((i = 1; i < ${#DOCKER_OPT[@]}; ++i)); do
	if [ -z "${DOCKER_OPT[$i]}" ]; then
		echo Error: $i missing.
		exit 1
	fi
done

# Work through each array element, using ${!.
# regardless how it's spelled.
for i in "${!DOCKER_OPT[@]}"; do
	OPTION="${DOCKER_OPT[$i]}"
	jq "${OPTION}" ${WORKDIR}/${JSON_FILE} > ${WORKDIR}/${JSON_FILE}.new && \
		mv -b ${WORKDIR}/${JSON_FILE}.new ${WORKDIR}/${JSON_FILE}
	yq -y . ${WORKDIR}/${JSON_FILE} > ${WORKDIR}/${YAML_FILE}
done


cat ${WORKDIR}/${JSON_FILE} | jq
