#!/bin/bash
set -e

SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
PROJECT_ROOT="$(dirname "$(dirname "$SCRIPT_DIR")")"
TARGET_DIR="$PROJECT_ROOT/target"
BINDINGS_DIR="$PROJECT_ROOT/bindings/ios"
OUT_DIR="$PROJECT_ROOT/out/ios"

echo "🔨 Creating ProofMode XCFramework for iOS..."

# Set deployment target
export IPHONEOS_DEPLOYMENT_TARGET=14.0

# Clean up
rm -rf "$OUT_DIR"
mkdir -p "$OUT_DIR"
mkdir -p "$BINDINGS_DIR"

# Check if libraries already exist, if not build them
if [ ! -f "$TARGET_DIR/aarch64-apple-ios/release/libproofmode.a" ]; then
    echo "Building for iOS device (aarch64)..."
    cargo build --target aarch64-apple-ios --release --no-default-features --features uniffi
fi

if [ ! -f "$TARGET_DIR/aarch64-apple-ios-sim/release/libproofmode.a" ]; then
    echo "Building for iOS simulator (arm64)..."
    cargo build --target aarch64-apple-ios-sim --release --no-default-features --features uniffi
fi

if [ ! -f "$TARGET_DIR/x86_64-apple-ios/release/libproofmode.a" ]; then
    echo "Building for iOS simulator (x86_64)..."
    cargo build --target x86_64-apple-ios --release --no-default-features --features uniffi
fi

# Generate bindings from the static library
echo "Generating Swift bindings..."
cargo run --features uniffi --bin uniffi-bindgen generate \
    --language swift \
    --library "$TARGET_DIR/aarch64-apple-ios/release/libproofmode.a" \
    --out-dir "$BINDINGS_DIR"

# Create fat binary for simulators
echo "Creating universal simulator library..."
lipo -create \
    "$TARGET_DIR/aarch64-apple-ios-sim/release/libproofmode.a" \
    "$TARGET_DIR/x86_64-apple-ios/release/libproofmode.a" \
    -output "$TARGET_DIR/simulators.a"

# Prepare headers
echo "Preparing headers..."
mkdir -p "$BINDINGS_DIR/include"
cp "$BINDINGS_DIR/proofmodeFFI.h" "$BINDINGS_DIR/include/"
cp "$BINDINGS_DIR/proofmodeFFI.modulemap" "$BINDINGS_DIR/include/module.modulemap"

# Create XCFramework
echo "Creating XCFramework..."
xcodebuild -create-xcframework \
    -library "$TARGET_DIR/aarch64-apple-ios/release/libproofmode.a" \
    -headers "$BINDINGS_DIR/include" \
    -library "$TARGET_DIR/simulators.a" \
    -headers "$BINDINGS_DIR/include" \
    -output "$OUT_DIR/ProofMode.xcframework"

# Create zip for distribution
echo "Creating distribution package..."
(cd "$OUT_DIR" && zip -r "ProofMode.xcframework.zip" "ProofMode.xcframework")

# Copy Swift bindings
cp "$BINDINGS_DIR/proofmode.swift" "$OUT_DIR/ProofMode.swift"

# Clean up temporary files
rm -f "$TARGET_DIR/simulators.a"

echo "✅ Build complete!"
echo "📦 XCFramework: $OUT_DIR/ProofMode.xcframework"
echo "📄 Swift bindings: $OUT_DIR/ProofMode.swift"
echo "🗜️ Distribution package: $OUT_DIR/ProofMode.xcframework.zip"