#!/bin/sh

# Start the DBT-2 client.

usage()
{
	echo "usage: $0 <database address> [DBMS [CONNECTIONS]]"
}

# Use the specified engine from the environment, or try podman then docker.
if [ "$ENGINE" = "" ]; then
	ENGINE="podman"
	if ! which "$ENGINE" > /dev/null 2>&1; then
		ENGINE="docker"
		if ! which "$ENGINE" > /dev/null 2>&1; then
			echo "podman nor docker in path"
			exit 1
		fi
	fi
else
	if ! which "$ENGINE" > /dev/null 2>&1; then
		echo "specified engine $ENGINE not in path"
		exit 1
	fi
fi
echo "using container engine: $ENGINE"

if [ "$ENGINE" = "podman" ]; then
	# Sometimes it's "podman", sometimes "cni-podman0".
	PODMANNETWORK=$(podman network ls -q | grep podman | head -n 1)
	echo "using podman network: $PODMANNETWORK"
	ENGINEARGS="--network=$PODMANNETWORK"
fi

if [ $# -lt 1 ]; then
	usage
	exit 1
fi

DATABASE_CONNECTIONS=10
DBMS="pgsql"

HOST=$1

if [ $# -ge 2 ]; then
	DBMS=$2
fi

if [ $# -ge 3 ]; then
	DATABASE_CONNECTIONS=$3
fi

CONTAINERDIR=$(dirname "$0")
CONTAINER_NAME="dbt2-client-${DATABASE_CONNECTIONS}"
CONTAINER_TAG="dbt2-client"

DBNAME="dbt2"

# Use the return code from `$ENGINE inspect` to determine if the container
# image needs to be created.
if ! $ENGINE inspect $CONTAINER_TAG > /dev/null; then
	"${CONTAINERDIR}/build-client" "$DBMS" || exit 1
fi

if [ "$DBMS" = "pgsql" ]; then
	# shellcheck disable=SC2086 # ENGINEARGS is intentionally word split
	$ENGINE run \
		$ENGINEARGS \
		-d \
		--rm \
		--name "$CONTAINER_NAME" \
		-p 30000:30000 \
		-e PGUSER="postgres" \
		$CONTAINER_TAG \
		dbt2-client -a "$DBMS" -f -c "$DATABASE_CONNECTIONS" -d "$HOST" \
		-b "$DBNAME" \
				-o /tmp
	RC=$?
else
	RC=1
fi
if [ $RC -ne 0 ]; then
	usage
	exit 1
fi

if which jq > /dev/null 2>&1; then
	if [ "$ENGINE" = "podman" ]; then
		IPADDRESS=$($ENGINE inspect "$CONTAINER_NAME" | jq -r ".[0].NetworkSettings.Networks[\"$PODMANNETWORK\"].IPAddress")
	elif [ "$ENGINE" = "docker" ]; then
		IPADDRESS=$($ENGINE inspect "$CONTAINER_NAME" | jq -r '.[0].NetworkSettings.IPAddress')
	fi
	echo "IP Address: $IPADDRESS"
	echo "${CONTAINERDIR}/start-driver $IPADDRESS"
else
	echo "Install jq for some tips the next time you run this script, or"
	echo "read the bottom of the file: $0"
fi
