#!/bin/bash
##
## Vagrant Box: Create an index metadata for a version from per-provider metadata
##
## SPDX-FileCopyrightText: 2015-2024 SATOH Fumiyasu @ OSSTech Corp., Japan
## SPDX-License-Identifier: GPL-3.0-or-later
##

set -u
set -o pipefail || exit $?
shopt -s lastpipe || exit $?
shopt -s nullglob || exit $?

pdie() {
  echo "$0: ERROR: $1"
  exit 1
}

## ======================================================================

if [[ $# -ne 1 ]]; then
  echo "Usage: $0 <BOX_REPO>/<BOX_NAME>/<BOX_VERSION>"
  exit 1
fi

box_dir="$1"; shift
box_index_json="$box_dir/index.json"

rm -f -- "$box_index_json"

box_provider_jsons=("$box_dir"/*.json)
if [[ ${#box_provider_jsons[@]} -eq 0 ]]; then
  pdie "No provider JSON files found: $box_dir"
fi

box_versions=($(
  jq '.versions | .[0] |.version' "${box_provider_jsons[@]}" \
  |sort -u \
  ;
))
if [[ ${#box_versions[@]} -eq 0 ]]; then
  pdie "No version found in JSON file(s): ${box_provider_jsons[*]}"
fi
if [[ ${#box_versions[@]} -ge 2 ]]; then
  pdie "Multiple versions found: $(echo "$box_versions" |sed 's/^"//;s/"$//')"
fi

box_version="${box_versions[0]}"

{
  jq \
    --compact-output \
    'del(.versions)' \
    "${box_provider_jsons[0]}" \
  |sed 's/}$/,/' \
  ;

  printf '"versions": [{"version": %s, "providers": [' "$box_version"
  jq \
    --compact-output \
    '.versions |.[] |.providers |.[]' \
    "${box_provider_jsons[@]}" \
  |sed '$!s/$/,/' \
  ;
  echo ']}]}'
} \
|jq '.' \
>"$box_index_json" \
;

## ======================================================================

exit 0
