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

ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
HEADER="$ROOT_DIR/include/rnn_ffi.h"
RUST_IMPL="$ROOT_DIR/src/ffi_api/ffi_api.rs"

required_symbols=(
  "rnn_ffi_api_version"
  "rnn_ffi_is_abi_compatible"
  "rnn_ffi_abi_info"
  "rnn_ffi_required_dense_from_bytes_v1"
  "rnn_ffi_required_dense_from_topology"
  "rnn_ffi_model_info_from_bytes_v1"
  "rnn_ffi_model_create_from_bytes_v1"
  "rnn_ffi_model_destroy"
  "rnn_ffi_model_get_info"
  "rnn_ffi_model_run_dense"
  "rnn_ffi_model_run_dense_batch"
  "rnn_ffi_run_dense_v1"
  "rnn_ffi_run_dense_batch_v1"
  "rnn_ffi_error_message"
)

for sym in "${required_symbols[@]}"; do
  if ! grep -q "$sym" "$HEADER"; then
    echo "missing symbol in header: $sym" >&2
    exit 2
  fi
  if ! grep -q "$sym" "$RUST_IMPL"; then
    echo "missing symbol in rust ffi implementation: $sym" >&2
    exit 3
  fi
done

echo "ABI contract symbols present in header and Rust implementation."
