#!/usr/bin/env bash

set -e

say() {
	[ -n "$*" ] && echo "$PGM: $*" >&2 || return
}
log() {
	DEBUG=${DEBUG:-no}
	[ ! "${DEBUG:-}" = "yes" ] && return
	say "$*"
}

PGM=$(basename "$0")
TMP=$(mktemp) || exit $?

trap "rm -rf $TMP $TMP.*" EXIT

BASEDIR=$(cd $(dirname $0)/.. && pwd)
say BASEDIR $BASEDIR
SHAREDIR=$(cd $BASEDIR/share 2>/dev/null ||
	cd /usr/share/opensim-cli/share 2>/dev/null && pwd) ||
	exit 2
log SHAREDIR $SHAREDIR
log Images $SHAREDIR/podman/images

if ! cut -d"#" -f 1 $SHAREDIR/podman/images | grep "." >$TMP.images; then
	log empty images list $SHAREDIR/podman/images
	exit 1
fi

if [ -z "$1" ]; then
	echo "usage: $PGM <image>"
	echo
	cat $TMP.images | sed "s/^/  /"
	exit
fi

remote=${CONTAINER_CONNECTION:+ssh ${CONTAINER_CONNECTION}}
$remote opensim --layout --format=env >$TMP.layout
. $TMP.layout
[ -z ${OPENSIM_SYSTEM_UID:-} ] &&
	log "opensim-cli must be installed and up to date on ${CONTAINER_CONNECTION:-local host}" &&
	exit 1

dry_run=
if [ "${DRY_RUN:-}" = "yes" ]; then
	dry_run="say [DRY_RUN]"
fi

OPENSIM_SYSTEM_USER=${OPENSIM_SYSTEM_USER:-opensim}
OPENSIM_SYSTEM_GROUP=${OPENSIM_SYSTEM_GROUP:-opensim}
OPENSIM_SYSTEM_UID=${OPENSIM_SYSTEM_UID:-8002}
OPENSIM_SYSTEM_GID=${OPENSIM_SYSTEM_GID:-8002}
OPENSIM_ADMIN_USER=${OPENSIM_ADMIN_USER:-${CURRENT_USER:-${OPENSIM_SYSTEM_USER}}}
OPENSIM_ADMIN_UID=${OPENSIM_ADMIN_UID:-${CURRENT_UID:-${OPENSIM_SYSTEM_UID}}}
OPENSIM_ADMIN_GROUP=${OPENSIM_ADMIN_GROUP:-${CURRENT_GROUP:-${OPENSIM_SYSTEM_GROUP}}}
OPENSIM_ADMIN_GID=${OPENSIM_ADMIN_GID:-${CURRENT_GID:-${OPENSIM_SYSTEM_GID}}}

for key in $*; do
	grep "^$key\b" $TMP.images | while read key image os_id os_version; do
		case $key in
		debian-13 | ubuntu-26.04)
			label=["latest","$os_version"]
			;;
		*)
			label=["$os_version"]
			;;
		esac
		args=(
			# "--network host"
			"--from $image"
			# "--isolation rootless"
			# "--isolation oci"
			"--userns host"
			# "--userns container"
			"--tag opensim-$key"
			"--label $label"
			"--build-arg OPENSIM_SYSTEM_USER=${OPENSIM_SYSTEM_USER}"
			"--build-arg OPENSIM_SYSTEM_UID=${OPENSIM_SYSTEM_UID}"
			"--build-arg OPENSIM_SYSTEM_GROUP=${OPENSIM_SYSTEM_GROUP}"
			"--build-arg OPENSIM_SYSTEM_GID=${OPENSIM_SYSTEM_GID}"
			"--build-arg OPENSIM_ADMIN_USER=${OPENSIM_ADMIN_USER}"
		)
		args+=(
			"--build-arg OPENSIM_ADMIN_UID=${OPENSIM_ADMIN_UID}"
			"--build-arg OPENSIM_ADMIN_GROUP=${OPENSIM_ADMIN_GROUP}"
			"--build-arg OPENSIM_ADMIN_GID=${OPENSIM_ADMIN_GID}"
			"--build-arg OPENSIM_VAR_ROOT=${OPENSIM_VAR_ROOT}"
		)

		command="podman --cgroup-manager=cgroupfs build $SHAREDIR/podman/debian ${args[@]}"
		$dry_run ${command} || exit $?
		say "[SUCCESS]"
	done
done
