#!/bin/sh
cd $(dirname $0)
td_path=$(grealpath ../..)

rm -rf build
mkdir -p build
cd build

set_cmake_options () {
  # Set CMAKE options depending on platform passed $1
  openssl_path=$(grealpath ../third_party/openssl/$1)
  echo "OpenSSL path = ${openssl_path}"
  openssl_crypto_library="${openssl_path}/lib/libcrypto.a"
  openssl_ssl_library="${openssl_path}/lib/libssl.a"
  options=""
  options="$options -DOPENSSL_FOUND=1"
  options="$options -DOPENSSL_CRYPTO_LIBRARY=${openssl_crypto_library}"
  options="$options -DOPENSSL_SSL_LIBRARY=${openssl_ssl_library}"
  options="$options -DOPENSSL_INCLUDE_DIR=${openssl_path}/include"
  options="$options -DOPENSSL_LIBRARIES=${openssl_crypto_library};${openssl_ssl_library}"
  options="$options -DCMAKE_BUILD_TYPE=Release"
}

platforms="macOS iOS watchOS tvOS visionOS"
#platforms="watchOS"
for platform in $platforms;
do
  echo "Platform = ${platform}"
  if [[ $platform = "macOS" ]]; then
    simulators="0"
  else
    simulators="0 1"
  fi

  for simulator in $simulators;
  do
    if [[ $platform = "macOS" ]]; then
      other_options="-DCMAKE_OSX_ARCHITECTURES='x86_64;arm64'"
    else
      if [[ $platform = "watchOS" ]]; then
        ios_platform="WATCH"
      elif [[ $platform = "tvOS" ]]; then
        ios_platform="TV"
      elif [[ $platform = "visionOS" ]]; then
        ios_platform="VISION"
      else
        ios_platform=""
      fi

      if [[ $simulator = "1" ]]; then
        platform="${platform}-simulator"
        ios_platform="${ios_platform}SIMULATOR"
      else
        ios_platform="${ios_platform}OS"
      fi

      echo "iOS platform = ${ios_platform}"
      other_options="-DIOS_PLATFORM=${ios_platform} -DCMAKE_TOOLCHAIN_FILE=${td_path}/CMake/iOS.cmake -DCMAKE_MAKE_PROGRAM=make"
    fi

    set_cmake_options $platform
    build="build-${platform}"
    install="install-${platform}"
    rm -rf $build
    mkdir -p $build
    mkdir -p $install
    cd $build
    cmake $td_path $options $other_options -DCMAKE_INSTALL_PREFIX=../${install}
    make -j3 install || exit
    cd ..
    install_name_tool -id @rpath/libtdjson.dylib ${install}/lib/libtdjson.dylib
    mkdir -p ../tdjson/${platform}/include
    rsync --recursive ${install}/include/ ../tdjson/${platform}/include/
    mkdir -p ../tdjson/${platform}/lib
    cp ${install}/lib/libtdjson.dylib ../tdjson/${platform}/lib/
  done
done

produced_dylibs=(install-*/lib/libtdjson.dylib)
xcodebuild_frameworks=()

for dylib in "${produced_dylibs[@]}";
do
  xcodebuild_frameworks+=(-library $(grealpath "${dylib}"))
done

# Make xcframework
xcodebuild -create-xcframework \
    "${xcodebuild_frameworks[@]}" \
    -output "libtdjson.xcframework"

rsync --recursive libtdjson.xcframework ../tdjson/
