#!/usr/bin/env bash
# create-pulse-resources-ios.sh
# Xcode build phase script for generating Pulse Updates embedded resources
# Based on expo-updates create-updates-resources-ios.sh

set -eo pipefail

# Skip in debug mode unless FORCE_BUNDLING is set
if [[ "$CONFIGURATION" == *Debug* ]]; then
  if [[ "$FORCE_BUNDLING" ]]; then
    echo "[PulseUpdates] FORCE_BUNDLING enabled; generating embedded manifest."
  else
    echo "[PulseUpdates] Debug build; skipping embedded manifest generation."
    echo "[PulseUpdates] Set FORCE_BUNDLING=1 to generate in debug mode."
    exit 0
  fi
fi

if [[ "$SKIP_BUNDLING" ]]; then
  echo "[PulseUpdates] SKIP_BUNDLING enabled; skipping embedded manifest generation."
  exit 0
fi

PULSE_UPDATES_PACKAGE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd -P)"

# Destination for the embedded resources
DEST="${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"

# Project root - try to find it
if [ -n "$PROJECT_ROOT" ]; then
  PROJECT_ROOT="$PROJECT_ROOT"
elif [ -d "$PROJECT_DIR/../.." ] && [ -f "$PROJECT_DIR/../../package.json" ]; then
  PROJECT_ROOT="$PROJECT_DIR/../.."
elif [ -d "$PROJECT_DIR/.." ] && [ -f "$PROJECT_DIR/../package.json" ]; then
  PROJECT_ROOT="$PROJECT_DIR/.."
else
  echo "[PulseUpdates] Could not determine PROJECT_ROOT. Set it manually."
  exit 1
fi

cd "$PROJECT_ROOT" || exit 1
PROJECT_ROOT="$(pwd -P)"

echo "[PulseUpdates] Project root: $PROJECT_ROOT"
echo "[PulseUpdates] Destination: $DEST"

# Find the bundle and assets
BUNDLE_PATH="$DEST/main.jsbundle"
ASSETS_PATH="$DEST/assets"

if [ ! -f "$BUNDLE_PATH" ]; then
  echo "[PulseUpdates] Bundle not found at $BUNDLE_PATH"
  echo "[PulseUpdates] Make sure react-native bundle runs before this script."
  exit 1
fi

# Get runtime version from Info.plist or environment
if [ -n "$MARKETING_VERSION" ]; then
  RUNTIME_VERSION="$MARKETING_VERSION"
elif [ -n "$CURRENT_PROJECT_VERSION" ]; then
  RUNTIME_VERSION="$CURRENT_PROJECT_VERSION"
else
  # Try to read from Info.plist
  PLIST_PATH="$INFOPLIST_FILE"
  if [ -f "$PLIST_PATH" ]; then
    RUNTIME_VERSION=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "$PLIST_PATH" 2>/dev/null || echo "")
  fi
fi

if [ -z "$RUNTIME_VERSION" ]; then
  echo "[PulseUpdates] Could not determine runtime version"
  exit 1
fi

echo "[PulseUpdates] Runtime version: $RUNTIME_VERSION"

# Create pulse directory in destination
PULSE_DIR="$DEST/pulse"
mkdir -p "$PULSE_DIR"

# Find node - try common locations
NODE_BIN=""
if command -v node &> /dev/null; then
  NODE_BIN="node"
elif [ -x "$HOME/.nvm/versions/node/$(cat $HOME/.nvmrc 2>/dev/null)/bin/node" ]; then
  NODE_BIN="$HOME/.nvm/versions/node/$(cat $HOME/.nvmrc)/bin/node"
elif [ -x "/usr/local/bin/node" ]; then
  NODE_BIN="/usr/local/bin/node"
elif [ -x "/opt/homebrew/bin/node" ]; then
  NODE_BIN="/opt/homebrew/bin/node"
fi

if [ -z "$NODE_BIN" ]; then
  echo "[PulseUpdates] Node.js not found"
  exit 1
fi

echo "[PulseUpdates] Using Node.js: $NODE_BIN"

# Run the generate-embedded-manifest.mjs script
"$NODE_BIN" "$PULSE_UPDATES_PACKAGE_DIR/scripts/generate-embedded-manifest.mjs" \
  --bundle "$BUNDLE_PATH" \
  --assets "$ASSETS_PATH" \
  --out "$DEST" \
  --platform ios \
  --runtime-version "$RUNTIME_VERSION"

if [ $? -eq 0 ]; then
  echo "[PulseUpdates] Embedded manifest generated successfully"
  echo "[PulseUpdates] Output: $PULSE_DIR/embedded-manifest.json"
else
  echo "[PulseUpdates] Failed to generate embedded manifest"
  exit 1
fi
