#!/bin/bash
set -e

. "$(dirname "$0")/common.sh"

DIST_DIR="$SCRIPT_DIR/dist"
mkdir -p "$DIST_DIR"

bundle_lib() {
  NAME="$1"
  EXCLUDE="$2"
  OUTPUT="$BUILD_DIR/$NAME"
  
  echo "Bundling $NAME..."
  
  TMPDIR=$(mktemp -d)
  
  LIBS=$(find "$BUILD_DIR" -name '*.a' \
    ! -name 'libant.a' \
    ! -name 'libant-lto.a' \
    ! -name 'libpkg.a' \
    ! -path '*/oxc-target/release/deps/*' \
    ! -path '*/.external/*' \
    2>/dev/null | grep -E -v "$EXCLUDE" | sort -u)
  
  cd "$TMPDIR"
  for lib in $LIBS; do
    libname=$(basename "$lib" .a)
    mkdir -p "$libname"
    (cd "$libname" && llvm-ar x "$lib" 2>/dev/null || ar x "$lib")
  done
  
  find . -name '*.o' > objects.txt
  
  if [ ! -s objects.txt ]; then
    echo "No objects found, skipping $NAME"
    rm -rf "$TMPDIR"
    cd "$SCRIPT_DIR"
    return
  fi
  
  if command -v llvm-ar >/dev/null 2>&1; then
    llvm-ar rcs "$OUTPUT" $(cat objects.txt)
  else
    ar rcs "$OUTPUT" $(cat objects.txt)
  fi
  
  rm -rf "$TMPDIR"
  cd "$SCRIPT_DIR"
  
  cp "$OUTPUT" "$DIST_DIR/"
  echo "Created: $DIST_DIR/$NAME ($(du -h "$OUTPUT" | cut -f1))"
}

bundle_lib "libant.a" "_lto"

if [ -f "$BUILD_DIR/libant_core_lto.a" ]; then
  bundle_lib "libant-lto.a" "libant_core.a"
fi

if [ -f "$BUILD_DIR/libant.h" ]; then
  cp "$BUILD_DIR/libant.h" "$DIST_DIR/ant.h"
  echo "Created: $DIST_DIR/ant.h"
fi

pkg_lib_path=$(find "$BUILD_DIR" -name 'libpkg.a' -print | head -n 1)
if [ -n "$pkg_lib_path" ] && [ -f "$pkg_lib_path" ]; then
  cp "$pkg_lib_path" "$DIST_DIR/libpkg.a"
  echo "Created: $DIST_DIR/libpkg.a ($(du -h "$pkg_lib_path" | cut -f1))"
fi

if [ -f "$ROOT_DIR/include/pkg.h" ]; then
  cp "$ROOT_DIR/include/pkg.h" "$DIST_DIR/pkg.h"
  echo "Created: $DIST_DIR/pkg.h"
fi

echo ""
echo "Done! Distribution files in $DIST_DIR:"
ls -lh "$DIST_DIR"/ 2>/dev/null || echo "No files found"
