#!/usr/bin/env bash
# Copyright 2013 The Flutter Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Generates objc docs for Flutter iOS libraries.

set -e

FLUTTER_UMBRELLA_HEADER=$(find ../out -maxdepth 4 -type f -name Flutter.h | grep 'ios_' | head -n 1)
if [[ ! -f "$FLUTTER_UMBRELLA_HEADER" ]]
  then
      echo "Error: This script must be run at the root of the Flutter source tree with at least one built Flutter.framework in ../out/ios*/Flutter.framework."
      exit 1
fi


# If the script is running from within LUCI we use the LUCI_WORKDIR, if not we force the caller of the script
# to pass an output directory as the first parameter.
OUTPUT_DIR=""

if [[ -z "$LUCI_CI" ]]; then
  if [[ $# -eq 0 ]]; then
    echo "Error: Argument specifying output directory required."
    exit 1
  else
    OUTPUT_DIR="$1"
  fi
else
  OUTPUT_DIR="$LUCI_WORKDIR/objectc_docs"
fi

# If GEM_HOME is set, prefer using its copy of jazzy.
# LUCI will put jazzy here instead of on the path.
if [[ -n "${GEM_HOME}" ]]
  then
    PATH="${GEM_HOME}/bin:$PATH"
fi

# Use iPhoneSimulator SDK
# See: https://github.com/realm/jazzy/issues/791
jazzy \
  --objc\
  --sdk iphonesimulator\
  --clean\
  --author Flutter Team\
  --author_url 'https://flutter.io'\
  --github_url 'https://github.com/flutter'\
  --github-file-prefix 'http://github.com/flutter/engine/blob/master'\
  --module-version 1.0.0\
  --xcodebuild-arguments --objc,"$FLUTTER_UMBRELLA_HEADER",--,-x,objective-c,-isysroot,"$(xcrun --show-sdk-path --sdk iphonesimulator)",-I,"$(pwd)"\
  --module Flutter\
  --root-url https://api.flutter.dev/objc/\
  --output "$OUTPUT_DIR"

EXPECTED_CLASSES="FlutterAppDelegate.html
FlutterBasicMessageChannel.html
FlutterCallbackCache.html
FlutterCallbackInformation.html
FlutterDartProject.html
FlutterEngine.html
FlutterEngineGroup.html
FlutterError.html
FlutterEventChannel.html
FlutterHeadlessDartRunner.html
FlutterMethodCall.html
FlutterMethodChannel.html
FlutterPluginAppLifeCycleDelegate.html
FlutterStandardMessageCodec.html
FlutterStandardMethodCodec.html
FlutterStandardReader.html
FlutterStandardReaderWriter.html
FlutterStandardTypedData.html
FlutterStandardWriter.html
FlutterViewController.html"

ACTUAL_CLASSES=$(ls "$OUTPUT_DIR/Classes" | sort)

if [[ $EXPECTED_CLASSES != $ACTUAL_CLASSES ]]; then
  echo "Expected classes did not match actual classes"
  echo
  diff <(echo "$EXPECTED_CLASSES") <(echo "$ACTUAL_CLASSES")
  exit -1
fi
