#!/usr/bin/env bash
set -euo pipefail

# Rebuild from the files in this public directory. No project checkout,
# submodule, private path, or network access is needed after the Docker image
# has been obtained.
kit_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
build_root=${KIVOZA_LIBHEIF_BUILD_ROOT:-"${kit_dir}/.build/libheif-v1.23.4"}
emscripten_image=emscripten/emsdk@sha256:96617f27fe16421588241def73908fd348a7f9d260440ed0d00b36dcf7a063cc
docker_user="$(id -u):$(id -g)"
libheif_archive="$kit_dir/libheif-v1.23.4-source.tar.gz"
libde265_archive="$kit_dir/libde265-v1.0.15-source.tar.gz"

test -f "$libheif_archive"
test -f "$libde265_archive"
rm -rf "$build_root"
mkdir -p "$build_root"
tar -xzf "$libheif_archive" -C "$build_root"
tar -xzf "$libde265_archive" -C "$build_root"

source_root="$build_root/libheif-1.23.4"
build_dir="$source_root/buildjs"
cp "$source_root/build-emscripten.sh" "$source_root/build-emscripten-kivoza.sh"
sed -i 's/-DENABLE_PLUGIN_LOADING=OFF"/-DENABLE_PLUGIN_LOADING=OFF -DBUILD_TESTING=OFF"/' \
  "$source_root/build-emscripten-kivoza.sh"
sed -i 's/^emcc -Wl,/em++ -Wl,/' "$source_root/build-emscripten-kivoza.sh"
mkdir -p "$build_dir"
# The upstream script looks for this archive in its build directory. Keeping
# the archive local makes its fallback curl path unnecessary and auditable.
cp "$libde265_archive" "$build_dir/libde265-1.0.15.tar.gz"

docker run --rm --network none \
  --memory=2g --memory-swap=2560m --cpus=2 --pids-limit=512 \
  --user "$docker_user" \
  -v "$build_root:/src" \
  -w /src/libheif-1.23.4/buildjs "$emscripten_image" \
  bash -lc 'set -euo pipefail; CORES=2 USE_WASM=1 USE_TYPESCRIPT=0 ENABLE_WEBCODECS=0 ENABLE_AOM=0 USE_UNSAFE_EVAL=0 ../build-emscripten-kivoza.sh ..'

# Emscripten emits a CommonJS/AMD footer by default. The browser bundle is an
# ESM module, so keep the generated factory and replace only that footer.
sed -i 's/if(typeof exports.*$/export default libheif;/' "$build_dir/libheif.js"

test -s "$build_dir/libheif.js"
test -s "$build_dir/libheif.wasm"
printf '%s\n' "Raw outputs: $build_dir/libheif.js and $build_dir/libheif.wasm"
printf '%s\n' "Run npm ci and node build-libheif-bundle.mjs for the ESM bundle."
