# Copyright 2021 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

set -ex

# Loop through arguments and process them
for arg in "$@"
do
  case $arg in
    --sdk=*)
      SDK="${arg#*=}"
      shift # Remove --sdk= from processing
      ;;
    --platform=*)
      PLATFORM="${arg#*=}"
      shift
      ;;
    --test_spec=*)
      TEST_SPEC="${arg#*=}"
      shift
      ;;
    --output_path=*)
      OUTPUT_PATH="${arg#*=}"
      shift
      ;;
  esac
done
DEFAULT_OUTPUT_PATH="/Users/runner/${SDK}-${PLATFORM}.xcresult"
DEFAULT_TEST_SPEC="unit"
OUTPUT_PATH="${OUTPUT_PATH:-${DEFAULT_OUTPUT_PATH}}"
TEST_SPEC="${TEST_SPEC:-${DEFAULT_TEST_SPEC}}"

[[ -z "$SDK" ]] && { echo "Parameter --sdk should be specified, e.g. --sdk=FirebaseStorage" ; exit 1; }
[[ -z "$PLATFORM" ]] && { echo "Parameter --platform should be specified, e.g. --platform=ios" ; exit 1; }

echo "SDK: ${SDK}"
echo "PLATFORM: ${PLATFORM}"
echo "OUTPUT_PATH: ${OUTPUT_PATH}"
echo "TEST_SPEC: ${TEST_SPEC}"

if [ -d "/Users/runner/Library/Developer/Xcode/DerivedData" ]; then
  rm -r /Users/runner/Library/Developer/Xcode/DerivedData/*
fi

# Setup for pod unit tests
if [ $SDK == "FirebasePerformance" ]; then
  scripts/setup_bundler.sh
  scripts/third_party/travis/retry.sh scripts/build.sh Performance ${PLATFORM} unit
elif [ $SDK == "FirebaseFirestore" ]; then
  scripts/install_prereqs.sh Firestore ${PLATFORM} xcodebuild
  scripts/third_party/travis/retry.sh scripts/build.sh Firestore ${PLATFORM} xcodebuild
else
  # Run unit tests of pods and put xcresult bundles into OUTPUT_PATH, which
  # should be a targeted dir of actions/upload-artifact in workflows.
  # In code coverage workflow, files under OUTPUT_PATH will be uploaded to
  # GitHub Actions.
  scripts/third_party/travis/retry.sh scripts/pod_lib_lint.rb "${SDK}".podspec --platforms="$(tr '[:upper:]' '[:lower:]'<<<${PLATFORM})" --test-specs="${TEST_SPEC}"
fi

find /Users/runner/Library/Developer/Xcode/DerivedData -type d -regex ".*/.*\.xcresult" -execdir cp -R '{}' "${OUTPUT_PATH}" \;
