#!/bin/bash

set -e

flutter doctor -v

###############################################################################
# Helper functions
###############################################################################

# Runs `packages get` on given flutter module.
# $1 = path to flutter module
function flutter_packages_get() {
  echo "Fetching dependencies and building '$1'."
  pushd $1
  flutter packages get
  popd
}

# Runs xcode build for Debug and Release.
# $1 = path to directory containing the xcode project
# $2 = name of the xcworkspace
# $3 = name of the scheme
function build() {
  echo "== Testing '$1' on Flutter's $FLUTTER_VERSION channel =="
  pushd "$1"

  pod install

  xcodebuild -workspace "$2" \
  -scheme "$3" CODE_SIGNING_ALLOWED=NO CODE_SIGNING_REQUIRED=NO \
  CODE_SIGN_IDENTITY=- EXPANDED_CODE_SIGN_IDENTITY=- \
  COMPILER_INDEX_STORE_ENABLE=NO CONFIGURATION=Debug | xcpretty

  xcodebuild -workspace "$2" \
  -scheme "$3" CODE_SIGNING_ALLOWED=NO CODE_SIGNING_REQUIRED=NO \
  CODE_SIGN_IDENTITY=- EXPANDED_CODE_SIGN_IDENTITY=- \
  COMPILER_INDEX_STORE_ENABLE=NO CONFIGURATION=Release \
  -destination generic/platform=iOS | xcpretty

  popd
}

###############################################################################
# Building preconditions
###############################################################################

echo "Pre-caching ios artifacts, such as the Flutter.framework"
flutter precache --no-web --no-linux --no-windows --no-fuchsia --no-android --no-macos

echo "Fetching dependencies and building 'prebuilt_module/flutter_module'."
pushd add_to_app/prebuilt_module/flutter_module
flutter packages get
flutter build ios-framework --xcframework --output="$(pwd)/../ios_using_prebuilt_module/Flutter"
popd

flutter_packages_get "add_to_app/books/flutter_module_books"
flutter_packages_get "add_to_app/fullscreen/flutter_module"
flutter_packages_get "add_to_app/multiple_flutters/multiple_flutters_module"
flutter_packages_get "add_to_app/plugin/flutter_module_using_plugin"

###############################################################################
# Build projects
###############################################################################

build "add_to_app/books/ios_books" "IosBooks.xcworkspace" "IosBooks"
build "add_to_app/fullscreen/ios_fullscreen" "IOSFullScreen.xcworkspace" "IOSFullScreen"
build "add_to_app/multiple_flutters/multiple_flutters_ios" "MultipleFluttersIos.xcworkspace" "MultipleFluttersIos"
build "add_to_app/plugin/ios_using_plugin" "IOSUsingPlugin.xcworkspace" "IOSUsingPlugin"

echo "== Testing 'add_to_app/prebuilt_module/ios_using_prebuilt_module' on Flutter's $FLUTTER_VERSION channel =="
pushd "add_to_app/prebuilt_module/ios_using_prebuilt_module"

xcodebuild CODE_SIGNING_ALLOWED=NO CODE_SIGNING_REQUIRED=NO \
CODE_SIGN_IDENTITY=- EXPANDED_CODE_SIGN_IDENTITY=- \
COMPILER_INDEX_STORE_ENABLE=NO CONFIGURATION=Debug | xcpretty

xcodebuild CODE_SIGNING_ALLOWED=NO CODE_SIGNING_REQUIRED=NO \
CODE_SIGN_IDENTITY=- EXPANDED_CODE_SIGN_IDENTITY=- \
COMPILER_INDEX_STORE_ENABLE=NO CONFIGURATION=Release \
-destination generic/platform=iOS | xcpretty

popd

echo "-- Success --"