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

# Build script for delta-rs-golang shared library

ROOT=$(cd $(dirname ${BASH_SOURCE[0]})/../../../ && pwd)
cd ${ROOT}

echo "Building delta-rs-golang shared library for x86_64 Linux (release mode)..."
echo "Note: Using memory-conservative build settings to avoid OOM issues"
echo "Note: Only building dynamic library (.so), skipping static library for faster build"

# Create build/so directory if it doesn't exist
mkdir -p ${ROOT}/build/so

# Build the Rust shared library using Docker
cd ${ROOT}/build/package/nextgen

echo "Building Rust library in Docker container (release mode with memory limits)..."
docker build --memory=4g --memory-swap=4g -f Dockerfile.rust -t delta-rs-builder ${ROOT}

echo "Extracting shared library from Docker container..."
# Create a temporary container and copy the shared library
CONTAINER_ID=$(docker create delta-rs-builder)
docker cp ${CONTAINER_ID}:/tmp/libdeltalake_golang.so ${ROOT}/build/so/
docker rm ${CONTAINER_ID}

echo "Note: Built with --release flag for optimized performance"

echo "Shared library built successfully at ${ROOT}/build/so/libdeltalake_golang.so"

# Verify the library file
if [[ -f "${ROOT}/build/so/libdeltalake_golang.so" ]]; then
    echo "✅ Shared library file exists (built in release mode)"
    ls -la "${ROOT}/build/so/libdeltalake_golang.so"
    # Show file info to verify it's a Linux x86_64 library
    file "${ROOT}/build/so/libdeltalake_golang.so" || echo "file command not available"
else
    echo "❌ Failed to build shared library"
    exit 1
fi