#!/usr/bin/env bash

set -xeu
set -o pipefail

export LANG=en_US.UTF-8
LANG=en_US.UTF-8

function finish() {
  if [[ -d "${RESULT_BUNDLE_PATH}" ]]; then
    ditto -c -k --sequesterRsrc --keepParent "${RESULT_BUNDLE_PATH}" "${RESULT_BUNDLE_PATH}.zip"
    rm -rf "${RESULT_BUNDLE_PATH}"
  fi
}

trap finish EXIT

SDK="${SDK:-iphoneos}"
WORKSPACE="${WORKSPACE:-ios/Runner.xcworkspace}"
SCHEME="${SCHEME:-Runner}"
CONFIGURATION="${CONFIGURATION:-Release}"

BUILD_DIR="${BUILD_DIR:-build}"
ARTIFACT_PATH="${RESULT_PATH:-${BUILD_DIR}/Artifacts}"
RESULT_BUNDLE_PATH="${ARTIFACT_PATH}/${SCHEME}.xcresult"
ARCHIVE_PATH="${ARCHIVE_PATH:-${BUILD_DIR}/Archives/${SCHEME}.xcarchive}"
DERIVED_DATA_PATH="${DERIVED_DATA_PATH:-${BUILD_DIR}/DerivedData}"
CURRENT_PROJECT_VERSION="${BUILD_NUMBER:-0}"
EXPORT_OPTIONS_FILE="Support/ExportOptions.plist"

# Clean and prepare the build
flutter clean
flutter pub get
flutter upgrade

cd ios
rm -rf Pods Podfile.lock
pod install --repo-update
pod update || { echo "Pod update failed"; exit 1; }
cd ..

rm -rf "${RESULT_BUNDLE_PATH}" "${DERIVED_DATA_PATH}"
mkdir -p "${ARTIFACT_PATH}"

# Archive the build
xcrun xcodebuild \
    -workspace "${WORKSPACE}" \
    -scheme "${SCHEME}" \
    -configuration "${CONFIGURATION}" \
    -sdk "${SDK}" \
    -parallelizeTargets \
    -showBuildTimingSummary \
    -derivedDataPath "${DERIVED_DATA_PATH}" \
    -archivePath "${ARCHIVE_PATH}" \
    -resultBundlePath "${RESULT_BUNDLE_PATH}" \
    -allowProvisioningUpdates \
    CURRENT_PROJECT_VERSION="${CURRENT_PROJECT_VERSION}" \
    archive || { echo "Xcode archive failed"; exit 1; }

# Export the build to .ipa
xcrun xcodebuild \
    -exportArchive \
    -exportOptionsPlist "${EXPORT_OPTIONS_FILE}" \
    -archivePath "${ARCHIVE_PATH}" \
    -exportPath "${ARTIFACT_PATH}/${SCHEME}.ipa" || { echo "Export to IPA failed"; exit 1; }

# Zip the archive
if [[ -d "${ARCHIVE_PATH}" ]]; then
  ditto -c -k --sequesterRsrc --keepParent "${ARCHIVE_PATH}" "${ARTIFACT_PATH}/${SCHEME}.xcarchive.zip"
else
  echo "Archive directory not found, skipping zip."
fi
