#!/usr/bin/env bash
set -euo pipefail

if [[ $# -ne 2 ]]; then
  printf 'usage: %s IMAGE_REFERENCE OUTPUT_ARCHIVE_NAME\n' "$0" >&2
  exit 2
fi

ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../../.." && pwd)"
IMAGE_REFERENCE="$1"
OUTPUT_NAME="$2"
[[ "$OUTPUT_NAME" =~ ^[a-zA-Z0-9._-]+\.oci$ ]] || {
  printf 'output archive name must be a simple .oci filename\n' >&2
  exit 2
}
ALLOWED="$(realpath -m "${XDG_STATE_HOME:-$HOME/.local/state}/overdeck/factory-images")"
OUTPUT="$ALLOWED/$OUTPUT_NAME"
mkdir -p "$(dirname "$OUTPUT")"
temporary="$OUTPUT.tmp.$$"
trap 'rm -f "$temporary"' EXIT

timeout 1800 podman build \
  --file "$ROOT/modules/harness/factory/kubernetes/Containerfile" \
  --tag "$IMAGE_REFERENCE" \
  "$ROOT"
"$ROOT/modules/harness/factory/kubernetes/verify-candidate.sh" "$IMAGE_REFERENCE"
timeout 900 podman save --format oci-archive --output "$temporary" "$IMAGE_REFERENCE"
mv -f "$temporary" "$OUTPUT"
trap - EXIT
image_id="$(podman image inspect --format '{{.Id}}' "$IMAGE_REFERENCE")"
printf 'FACTORY_IMAGE_CANDIDATE host=%s image=%s image_id=%s archive=%s\n' \
  "$(hostname)" "$IMAGE_REFERENCE" "$image_id" "$OUTPUT"
