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

docker-version-osarch() {
	local target="$1" # "Client" or "Server"
	local fmtStr="{{.${target}.Os}}/{{.${target}.Arch}}"
	if docker version -f "$fmtStr" 2>/dev/null; then
		# if "docker version -f" works, let's just use that!
		return
	fi
	docker version | awk '
		$1 ~ /^(Client|Server):$/ { section = 0 }
		$1 == "'"$target"':" { section = 1; next }
		section && $1 == "OS/Arch:" { print $2 }

		# old versions of Docker
		$1 == "OS/Arch" && $2 == "('"${target,,}"'):" { print $3 }
	'
}

# Retrieve OS/ARCH of docker daemon, e.g. linux/amd64
export DOCKER_ENGINE_OSARCH="${DOCKER_ENGINE_OSARCH:=$(docker-version-osarch 'Server')}"
export DOCKER_ENGINE_GOOS="${DOCKER_ENGINE_OSARCH%/*}"
export DOCKER_ENGINE_GOARCH="${DOCKER_ENGINE_OSARCH##*/}"
DOCKER_ENGINE_GOARCH=${DOCKER_ENGINE_GOARCH:=amd64}

# and the client, just in case
export DOCKER_CLIENT_OSARCH="$(docker-version-osarch 'Client')"
export DOCKER_CLIENT_GOOS="${DOCKER_CLIENT_OSARCH%/*}"
export DOCKER_CLIENT_GOARCH="${DOCKER_CLIENT_OSARCH##*/}"
DOCKER_CLIENT_GOARCH=${DOCKER_CLIENT_GOARCH:=amd64}

# Retrieve the architecture used in contrib/builder/(deb|rpm)/$PACKAGE_ARCH/
PACKAGE_ARCH='amd64'
case "${DOCKER_ENGINE_GOARCH:-$DOCKER_CLIENT_GOARCH}" in
	arm)
		PACKAGE_ARCH='armhf'
		;;
	arm64)
		PACKAGE_ARCH='aarch64'
		;;
	amd64|ppc64le|s390x)
		PACKAGE_ARCH="${DOCKER_ENGINE_GOARCH:-$DOCKER_CLIENT_GOARCH}"
		;;
	*)
		echo >&2 "warning: not sure how to convert '$DOCKER_ENGINE_GOARCH' to a 'Docker' arch, assuming '$PACKAGE_ARCH'"
		;;
esac
export PACKAGE_ARCH

DOCKERFILE='Dockerfile'
TEST_IMAGE_NAMESPACE=
case "$PACKAGE_ARCH" in
	amd64)
		case "${DOCKER_ENGINE_GOOS:-$DOCKER_CLIENT_GOOS}" in
			windows)
				DOCKERFILE='Dockerfile.windows'
				;;
			solaris)
				DOCKERFILE='Dockerfile.solaris'
				;;
		esac
		;;
	*)
		DOCKERFILE="Dockerfile.$PACKAGE_ARCH"
		TEST_IMAGE_NAMESPACE="$PACKAGE_ARCH"
		;;
esac
export DOCKERFILE TEST_IMAGE_NAMESPACE
