#!/bin/bash
# Build Zstd for WebAssembly
# Zstd is used for compression in KiCad project files

set -e

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${SCRIPT_DIR}/../common/env.sh"
source "${SCRIPT_DIR}/../common/versions.sh"
source "${SCRIPT_DIR}/../common/functions.sh"

ZSTD_DIR="${DEPS_ROOT}/zstd-${ZSTD_VERSION}"
ZSTD_BUILD="${BUILD_ROOT}/deps/zstd"
ZSTD_STAMP="${BUILD_ROOT}/stamps/zstd.stamp"

# Parse arguments
CLEAN=0
for arg in "$@"; do
    case $arg in
        --clean)
            CLEAN=1
            shift
            ;;
    esac
done

if [ $CLEAN -eq 1 ]; then
    log_info "Cleaning Zstd build..."
    rm -rf "${ZSTD_BUILD}" "${ZSTD_STAMP}"
fi

# Check if already built
if check_stamp "${ZSTD_STAMP}"; then
    log_info "Zstd already built, skipping..."
    exit 0
fi

# Download if needed
if [ ! -d "${ZSTD_DIR}" ]; then
    log_info "Downloading Zstd ${ZSTD_VERSION}..."
    mkdir -p "${DEPS_ROOT}"
    cd "${DEPS_ROOT}"

    ZSTD_URL="https://github.com/facebook/zstd/releases/download/v${ZSTD_VERSION}/zstd-${ZSTD_VERSION}.tar.gz"
    download_file "${ZSTD_URL}" "zstd-${ZSTD_VERSION}.tar.gz"
    tar -xzf "zstd-${ZSTD_VERSION}.tar.gz"
    rm "zstd-${ZSTD_VERSION}.tar.gz"
fi

log_info "Building Zstd ${ZSTD_VERSION} for WASM..."

mkdir -p "${ZSTD_BUILD}"
cd "${ZSTD_BUILD}"

# Zstd uses CMake in build/cmake directory
emcmake cmake "${ZSTD_DIR}/build/cmake" \
    -DCMAKE_BUILD_TYPE=${BUILD_TYPE:-Debug} \
    -DCMAKE_INSTALL_PREFIX="${SYSROOT}" \
    -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
    -DZSTD_BUILD_PROGRAMS=OFF \
    -DZSTD_BUILD_TESTS=OFF \
    -DZSTD_BUILD_SHARED=OFF \
    -DZSTD_BUILD_STATIC=ON \
    -DZSTD_MULTITHREAD_SUPPORT=ON \
    -DCMAKE_C_FLAGS="${DEBUG_CFLAGS:--g -O0} -pthread -matomics -mbulk-memory" \
    -DCMAKE_CXX_FLAGS="${DEBUG_CFLAGS:--g -O0} -pthread -matomics -mbulk-memory"

emmake make -j${JOBS}
emmake make install

create_stamp "${ZSTD_STAMP}"
log_info "Zstd build complete!"
