#!/bin/bash
##
## Vagrant Box: Create an index metadata from per-version 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>"
  exit 1
fi

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

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

box_latest_json=$(
  jq \
    --compact-output \
    '.versions | .[0] |[.version, input_filename]' \
    "${box_version_jsons[@]}" \
  |sed 's/^\["//;s/"\]$//;s/","/ /' \
  |sort --reverse --version-sort \
  |head -n1 \
  |sed 's/^[^ ]* //' \
  ;
)

if [[ -z $box_latest_json ]]; then
  pdie "No version found in per-version JSON files"
fi

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

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

  echo '"versions": ['
  jq \
    --compact-output \
    '.versions |.[]' \
    "${box_version_jsons[@]}" \
  |sed '$!s/$/,/' \
  ;
  echo ']'

  echo '}'
} \
|jq '.' \
>"$box_index_json" \
;

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

exit 0
