#!/bin/sh
set -eu
root=${1:-}
registration_root="$root/opt/studio-cucurbits/registrations"
manifest_root="$root/opt/studio-cucurbits/manifests"
mkdir -p -- "$registration_root" "$manifest_root"
unsorted="$manifest_root/.installed-products.unsorted.$$"
sorted="$manifest_root/.installed-products.sorted.$$"
registrations="$manifest_root/.installed-products.registrations.$$"
trap 'rm -f -- "$unsorted" "$sorted" "$registrations"' EXIT HUP INT TERM
: > "$unsorted"
find "$registration_root" -maxdepth 1 -type f -name '*.json' -printf '%T@ %p\n' | sort -n | cut -d' ' -f2- > "$registrations"
while IFS= read -r registration; do
    sed -e 's/^{"products":\[//' \
        -e 's/\],"schema":"studio.cucurbits.installed-products.v1"}$//' \
        -e 's/},{/}\
{/g' "$registration" >> "$unsorted"
done < "$registrations"
awk 'match($0, /"productId":"[^"]+"/) { id=substr($0, RSTART+13, RLENGTH-14); product[id]=$0 }
     END { for (id in product) print product[id] }' "$unsorted" | sort > "$sorted"
temporary="$manifest_root/installed-products.json.tmp.$$"
printf '{"products":[' > "$temporary"
separator=
while IFS= read -r product; do
    [ -n "$product" ] || continue
    printf '%s%s' "$separator" "$product" >> "$temporary"
    separator=,
done < "$sorted"
printf '],"schema":"studio.cucurbits.installed-products.v1"}\n' >> "$temporary"
chmod 644 "$temporary"
mv -- "$temporary" "$manifest_root/installed-products.json"
