#!/usr/bin/env bash

set -Eeuo pipefail

ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
MANIFEST="$ROOT/manifests/bundle.sha256"
MODE=${1:---check}

list_files() {
    find "$ROOT" -type f \
        ! -path "$MANIFEST" \
        ! -path '*/packages/*' \
        -print0 | sort -z
}

case "$MODE" in
    --write)
        mkdir -p "$(dirname "$MANIFEST")"
        temp=$(mktemp)
        while IFS= read -r -d '' file; do
            digest=$(sha256sum "$file" | awk '{print $1}')
            printf '%s  %s\n' "$digest" "${file#"$ROOT/"}" >>"$temp"
        done < <(list_files)
        mv "$temp" "$MANIFEST"
        ;;
    --check)
        [[ -f "$MANIFEST" ]] || { echo "bundle manifest missing: $MANIFEST" >&2; exit 1; }
        (cd "$ROOT" && sha256sum -c "${MANIFEST#"$ROOT/"}")
        ;;
    *)
        echo 'usage: bundle-sha256.sh [--write|--check]' >&2
        exit 2
        ;;
esac
