#!/bin/sh

set -eu

# LAYER_UUID comes from the engine's build plan and is reproducible across
# builds. This gives uniqueness across layers. IDs derived from it need to
# be unique and reproducible, so need seeding.
seed="${IGconf_image_name}:${IGconf_image_version}"
uuid5() { iguuid --sha1 --namespace "${LAYER_UUID:?}" --name "$seed:$1"; }


# Generate pre-defined UUIDs
BOOT_LABEL=$(uuid5 boot | sed 's/-.*//' | tr 'a-f' 'A-F')
BOOT_UUID=$(echo "$BOOT_LABEL" | sed 's/^\(....\)\(....\)$/\1-\2/')
SYSTEM_UUID=$(uuid5 system)
CRYPT_UUID=$(uuid5 crypt)
VERITY_UUID=$(uuid5 verity)
VERITY_SALT=$(uuid5 verity-salt | tr -d '-')


rm -f ${IGconf_image_outputdir}/img_uuids
for v in BOOT_LABEL BOOT_UUID SYSTEM_UUID CRYPT_UUID VERITY_UUID VERITY_SALT; do
    eval "val=\$$v"
    echo "$v=$val" >> "${IGconf_image_outputdir}/img_uuids"
done


# Install provision map, populating placeholders
pmap="../device/provisionmap-${IGconf_image_pmap:-}.json"
if [ -f "$pmap" ]; then
   env \
      BOOT_UUID="$BOOT_UUID" \
      SYSTEM_UUID="$SYSTEM_UUID" \
      CRYPT_UUID="$CRYPT_UUID" \
      LUKS_CIPHER="$IGconf_device_luks2_cipher" \
      LUKS_KEYSIZE="$IGconf_device_luks2_keysize" \
      LUKS_HASH="$IGconf_device_luks2_hash" \
   envsubst \
      '${BOOT_UUID} ${SYSTEM_UUID} ${CRYPT_UUID} ${LUKS_CIPHER} ${LUKS_KEYSIZE} ${LUKS_HASH}' \
      < "$pmap" > "${IGconf_image_outputdir}/provisionmap.json"
fi
