#!/bin/bash

# based on https://github.com/chinedufn/swift-bridge/tree/master/book/src/building/swift-packages

set -e

THISDIR=$(dirname $0)
cd $THISDIR

if [[ -f ~/.cargo/env ]];
then
  source ~/.cargo/env
fi

echo "Installing required components"

rustup +nightly component add rust-src
cargo install swift-bridge-cli
#rustup component add rust-src --toolchain x86_64-apple-ios-macabi
#rustup component add rust-src --toolchain darwin-apple-ios-macabi

rustup target add aarch64-apple-ios x86_64-apple-ios aarch64-apple-ios-sim

echo "Building stdlib for the desired platforms..."
#cargo build --target x86_64-apple-darwin
#cargo build --target aarch64-apple-darwin
cargo +nightly build --verbose -Z build-std --target x86_64-apple-ios-macabi
cargo +nightly build --verbose -Z build-std --target aarch64-apple-ios-macabi

BRIDGE_NAME=libmonal_rust_swift_bridge.a

echo "Creating catalyst target universal lib..."
mkdir -p ./target/catalyst-macos/debug
lipo \
    ./target/x86_64-apple-ios-macabi/debug/$BRIDGE_NAME \
    ./target/aarch64-apple-ios-macabi/debug/$BRIDGE_NAME \
    -create -output \
    ./target/catalyst-macos/debug/$BRIDGE_NAME

echo "Building rust code for all targets..."
cargo build --target aarch64-apple-ios
cargo build --target x86_64-apple-ios
cargo build --target aarch64-apple-ios-sim

echo "Creating ios target universal lib..."
mkdir -p ./target/universal-ios/debug
lipo \
    ./target/aarch64-apple-ios-sim/debug/$BRIDGE_NAME \
    ./target/x86_64-apple-ios/debug/$BRIDGE_NAME \
    -create -output \
    ./target/universal-ios/debug/$BRIDGE_NAME

echo "Creating swift package..."
swift-bridge-cli create-package \
  --bridges-dir ./monal-rust-swift-bridge/generated \
  --out-dir LibMonalRustSwiftBridge \
  --ios target/aarch64-apple-ios/debug/$BRIDGE_NAME \
  --simulator target/universal-ios/debug/$BRIDGE_NAME \
  --mac-catalyst target/catalyst-macos/debug/$BRIDGE_NAME \
  --name LibMonalRustSwiftBridge

# copy over our own swift files
cp -av ./monal-rust-swift-bridge/swift/* LibMonalRustSwiftBridge/Sources/LibMonalRustSwiftBridge/ 

# make sure all autogenerated swift to rust wrapper functions are public
# TODO: maybe fix upstream?
sed -i '' 's/^func/public func/g' LibMonalRustSwiftBridge/Sources/LibMonalRustSwiftBridge/*.swift