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

ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
MODEL_PATH="${1:-/tmp/sample.rnn}"

cd "$ROOT_DIR"

echo "[1/10] ABI contract check"
bash scripts/check_abi_contract.sh

echo "[2/10] Rust format"
cargo fmt --all -- --check

echo "[3/10] Rust clippy"
cargo clippy --all-targets -- -D warnings

echo "[4/10] Rust tests"
cargo test --lib --tests

echo "[5/10] Build release artifacts"
cargo build --release

LIB_PATH="$ROOT_DIR/target/release/librnn.so"
if [[ ! -f "$LIB_PATH" ]]; then
  echo "Expected native library not found: $LIB_PATH" >&2
  exit 2
fi
export RNN_FFI_LIB="$LIB_PATH"

echo "[6/10] Generate sample model"
cargo run --example generate_sample_model -- "$MODEL_PATH"

echo "[7/10] Python wrapper smoke"
python3 -m pip install -e wrappers/python
python3 wrappers/python/examples_infer.py --model "$MODEL_PATH" --input 0.1,0.2 --json

echo "[8/10] JavaScript wrapper smoke"
pushd wrappers/javascript >/dev/null
npm install
node example.js --model "$MODEL_PATH" --input 0.1,0.2 --json
popd >/dev/null

echo "[9/10] Java wrapper smoke"
mvn -q -f wrappers/java/pom.xml -DskipTests package dependency:build-classpath -Dmdep.outputFile=target/classpath.txt
JAVA_CP="wrappers/java/target/classes:$(cat wrappers/java/target/classpath.txt)"
java -cp "$JAVA_CP" ai.rnn.ExampleMain --model "$MODEL_PATH" --input 0.1,0.2 --json

echo "[10/10] C++ wrapper + cross-language consistency"
c++ -std=c++17 \
  -Iwrappers/cpp/include \
  -Iinclude \
  wrappers/cpp/src/rnn_wrapper.cpp \
  wrappers/cpp/src/example_main.cpp \
  target/release/librnn.a \
  -ldl -lpthread -lm \
  -o /tmp/rnn_cpp_example
/tmp/rnn_cpp_example --model "$MODEL_PATH" --input 0.1,0.2 --json

export RNN_JAVA_CMD="java -cp $JAVA_CP ai.rnn.ExampleMain"
export RNN_CPP_CMD="/tmp/rnn_cpp_example"
python3 wrappers/integration/cross_language_check.py --model "$MODEL_PATH" --input 0.1,0.2 --tol 1e-5

echo "All prod-ready checks passed."
