#!/usr/bin/env zsh
set -euo pipefail

ROOT="$(cd "$(dirname "$0")/.." && pwd)"
BUNDLES_DIR="$ROOT/NetworkSolutions/Campaigns/Bundles"
CSS_OUT="$BUNDLES_DIR/css"
JS_OUT="$BUNDLES_DIR/js"
FONTS_CSS_OUT="$CSS_OUT/fonts"

mkdir -p "$CSS_OUT" "$JS_OUT" "$FONTS_CSS_OUT"

# common.less references this legacy path; create a local shim when missing.
FORM_VALIDATION_CSS="$ROOT/campaigns/frameworks/formValidation/0.8.1/css/formValidation.css"
if [[ ! -f "$FORM_VALIDATION_CSS" ]]; then
  mkdir -p "$(dirname "$FORM_VALIDATION_CSS")"
  cat > "$FORM_VALIDATION_CSS" <<'EOF'
/* Local build shim: legacy formValidation.css not present in this repo. */
EOF
fi

# Legacy LESS imports also expect dependencies under campaigns/node_modules.
if [[ ! -e "$ROOT/campaigns/node_modules" ]]; then
  ln -s ../node_modules "$ROOT/campaigns/node_modules"
fi
VIDEO_JS_CSS="$ROOT/campaigns/node_modules/video.js/dist/video-js.css"
if [[ ! -f "$VIDEO_JS_CSS" ]]; then
  mkdir -p "$(dirname "$VIDEO_JS_CSS")"
  cat > "$VIDEO_JS_CSS" <<'EOF'
/* Local build shim: video.js css not present in this repo. */
EOF
fi

echo "[1/4] Compiling LESS bundles..."
npx lessc "$ROOT/campaigns/media/css/start/start.less" "$CSS_OUT/start.min.css"
npx lessc "$ROOT/campaigns/media/css/campaign/campaign.less" "$CSS_OUT/campaign.min.css"
npx lessc "$ROOT/campaigns/media/css/goodrx/goodrx.less" "$CSS_OUT/goodrx.min.css"

echo "[2/4] Building JS bundles..."
npx esbuild "$ROOT/campaigns/media/js/PhreesiaCampaign/main.ts" \
  --bundle --minify --platform=browser --format=iife --target=es2018 \
  --alias:GoodRx=./campaigns/media/js/GoodRx \
  --alias:PhreesiaCommon=./campaigns/media/js/PhreesiaCommon \
  --alias:PhreesiaCampaign=./campaigns/media/js/PhreesiaCampaign \
  --alias:PhreesiaStart=./campaigns/media/js/PhreesiaStart \
  --alias:PhreesiaSurvey=./campaigns/media/js/PhreesiaSurvey \
  --alias:global/constants=./campaigns/media/js/global/constants.ts \
  --outfile="$JS_OUT/phreesia-campaign.min.js"

npx esbuild "$ROOT/campaigns/media/js/PhreesiaStart/main.ts" \
  --bundle --minify --platform=browser --format=iife --target=es2018 \
  --alias:GoodRx=./campaigns/media/js/GoodRx \
  --alias:PhreesiaCommon=./campaigns/media/js/PhreesiaCommon \
  --alias:PhreesiaCampaign=./campaigns/media/js/PhreesiaCampaign \
  --alias:PhreesiaStart=./campaigns/media/js/PhreesiaStart \
  --alias:PhreesiaSurvey=./campaigns/media/js/PhreesiaSurvey \
  --alias:global/constants=./campaigns/media/js/global/constants.ts \
  --outfile="$JS_OUT/start.min.js"

npx esbuild "$ROOT/campaigns/media/js/GoodRx/main.ts" \
  --bundle --minify --platform=browser --format=iife --target=es2018 \
  --alias:GoodRx=./campaigns/media/js/GoodRx \
  --alias:PhreesiaCommon=./campaigns/media/js/PhreesiaCommon \
  --alias:PhreesiaCampaign=./campaigns/media/js/PhreesiaCampaign \
  --alias:PhreesiaStart=./campaigns/media/js/PhreesiaStart \
  --alias:PhreesiaSurvey=./campaigns/media/js/PhreesiaSurvey \
  --alias:global/constants=./campaigns/media/js/global/constants.ts \
  --outfile="$JS_OUT/goodrx.min.js"

echo "[3/4] Emitting common shim..."
# Shared templates include common.min.js before page-level bundles. We keep a local
# shim file so local pages resolve the script path without changing template markup.
cat > "$JS_OUT/common.min.js" <<'EOF'
(function(){
  if (typeof window === "undefined") return;
  if (window.jQuery && window.$) return;
  // Sync load so the next script tag (phreesia-campaign.min.js) sees window.$.
  document.write('<script src="https://code.jquery.com/jquery-3.7.1.min.js"><\/script>');
})();
EOF

echo "[4/4] Copying font css aliases..."
for f in "$ROOT"/campaigns/media/css/fonts/*.css; do
  base="$(basename "$f" .css)"
  cp "$f" "$FONTS_CSS_OUT/$base.css"
  cp "$f" "$FONTS_CSS_OUT/$base.min.css"
done

echo "Done."
echo "Local bundles written to: $BUNDLES_DIR"
