#!/usr/bin/env bash
# Deploys a Rugix App from a Nexigon package version.
# Reads versionId and optional assetFilename from stdin JSON.
set -euo pipefail

USE_BUNDLE_HASH=${NEXIGON_RUGIX_APPS_USE_BUNDLE_HASH:-@@USE_BUNDLE_HASH@@}

read -r input
version_id=$(echo "$input" | jq -r '.versionId')
asset_filename=$(echo "$input" | jq -r '.assetFilename // empty')

echo "Resolving version $version_id..." >&2

version_info=$(nexigon-agent repositories versions info "$version_id")

if [ -n "$asset_filename" ]; then
    asset=$(echo "$version_info" | jq --arg f "$asset_filename" \
        'first(.assets[] | select(.filename == $f))')
else
    asset=$(echo "$version_info" | jq \
        'first(.assets[] | select(.filename | endswith(".rugixb")))')
fi

if [ -z "$asset" ] || [ "$asset" = "null" ]; then
    echo "No matching .rugixb asset found in version $version_id" >&2
    exit 1
fi

asset_id=$(echo "$asset" | jq -r '.assetId // empty')
bundle_hash=$(echo "$asset" | jq -r '.metadata.rugix.bundleHash // empty')

if [ -z "$asset_id" ]; then
    echo "Matching .rugixb asset has no asset ID" >&2
    exit 1
fi

echo "Issuing download URL for $asset_id..." >&2

download_url=$(nexigon-agent repositories issue-url "$asset_id" | jq -r '.url')

echo "Installing app from $download_url..." >&2

install_args=()
if [ "$USE_BUNDLE_HASH" = "true" ] && [ -n "$bundle_hash" ]; then
    install_args+=(--bundle-hash "$bundle_hash")
fi

output=$(rugix-ctrl apps install "${install_args[@]}" "$download_url")
echo "{\"type\": \"Output\", \"data\": $(echo "$output" | jq -c .)}"
