#!/usr/bin/env bash

set -euo pipefail

if [[ $# -ne 1 ]]; then
  echo "Usage: scripts/build-binary <npm-platform-package>" >&2
  exit 1
fi

repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
package_name="$1"
output_dir="$repo_root/dist/native/$package_name"
work_dir="$repo_root/build/pyinstaller/$package_name"
font_cache_dir="$work_dir/matplotlib-cache"

case "$package_name" in
  agentrecap-darwin-arm64|\
  agentrecap-darwin-x64|\
  agentrecap-linux-arm64|\
  agentrecap-linux-x64|\
  agentrecap-linux-arm64-musl|\
  agentrecap-linux-x64-musl|\
  agentrecap-windows-arm64|\
  agentrecap-windows-x64)
    ;;
  *)
    echo "Unknown platform package: $package_name" >&2
    exit 1
    ;;
esac

mkdir -p "$output_dir/bin" "$work_dir"
rm -rf "$output_dir/bin/agentrecap"
rm -rf "$font_cache_dir"
mkdir -p "$font_cache_dir"

cd "$repo_root"
(
  cd "$font_cache_dir"
  MPLCONFIGDIR="$font_cache_dir" uv run \
    --directory "$repo_root" \
    --isolated \
    --locked \
    python "$repo_root/scripts/build-font-cache.py"
)

font_cache_files=("$font_cache_dir"/fontlist*.json)
if [[ ${#font_cache_files[@]} -ne 1 || ! -f "${font_cache_files[0]}" ]]; then
  echo "Matplotlib font cache was not generated" >&2
  exit 1
fi
font_cache_relative="matplotlib-cache/${font_cache_files[0]##*/}"

uv run \
  --isolated \
  --locked \
  --with "pyinstaller==6.21.0" \
  pyinstaller \
  --clean \
  --noconfirm \
  --onedir \
  --name agentrecap \
  --add-data "$font_cache_relative:agentrecap" \
  --collect-data agentrecap \
  --exclude-module pyarrow \
  --distpath "$output_dir/bin" \
  --workpath "$work_dir" \
  --specpath "$work_dir" \
  scripts/pyinstaller_entrypoint.py

if [[ "$package_name" == agentrecap-windows-* ]]; then
  binary="$output_dir/bin/agentrecap/agentrecap.exe"
else
  binary="$output_dir/bin/agentrecap/agentrecap"
fi

if [[ ! -f "$binary" ]]; then
  echo "PyInstaller did not produce $binary" >&2
  exit 1
fi

if [[ "$package_name" != agentrecap-windows-* ]]; then
  chmod 755 "$binary"
fi

echo "Built $binary"
