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

campaign="${1:-}"

if [[ -z "$campaign" ]]; then
  echo "usage: scripts/run-campaign.v5.1.0.zsh <campaign>"
  exit 1
fi

# STREAM_PATH_NOTE: "awareness" is the hardcoded default stream name.
# If multi-stream support is added, replace "awareness" with the stream variable.
preflight_json="campaigns/content/$campaign/awareness/_sologen/json/preflight.json"
if [[ ! -s "$preflight_json" ]]; then
  echo "ERROR Missing preflight JSON: $preflight_json"
  exit 2
fi

pages=("${(@f)$(node -e '
const fs=require("fs");
const p=process.argv[1];
try{
  const j=JSON.parse(fs.readFileSync(p,"utf8"));
  const screens=Array.isArray(j?.screens)?j.screens:[];
  for(const s of screens){
    const id=String(s?.id||"").trim();
    if(id) process.stdout.write(id + "\n");
  }
}catch(e){
  process.stderr.write("Failed to parse preflight JSON: "+String(e.message||e)+"\n");
  process.exit(3);
}
' "$preflight_json")}")

if [[ "${#pages[@]}" -eq 0 ]]; then
  echo "ERROR No screens found in $preflight_json"
  exit 3
fi

echo "[run-campaign:v5] campaign=$campaign pages=${#pages[@]}"

echo ""
echo "[run-campaign:v5] sync preflight -> sologen.config.json"
scripts/sync-preflight-config.v0.1.0.zsh "$campaign"

has_isi=0
for page in "${pages[@]}"; do
  if [[ "${page:l}" == "isi" ]]; then
    has_isi=1
    break
  fi
done

if [[ "$has_isi" == "1" ]]; then
  echo ""
  echo "[run-campaign:v5] running ISI asset prep (no page build): isi"
  scripts/export-frame-jsons.v0.1.3.zsh "$campaign" "isi"
  # generate-asset-names intentionally excludes the isi dir — ISI images keep hash-based names
  scripts/export-exportables.v0.1.6.zsh "$campaign" "isi"
  scripts/export-image-fills.v0.1.3.zsh "$campaign" "isi"
fi

# ── Modal screens ──────────────────────────────────────────────────────────
if [[ -s "$preflight_json" ]]; then
  node -e '
const fs=require("fs");
try{
  const j=JSON.parse(fs.readFileSync(process.argv[1],"utf8"));
  const modals=Array.isArray(j?.modals)?j.modals:[];
  for(const m of modals){
    const slug=String(m?.slug||"").trim();
    const du=String(m?.desktopUrl||"").trim();
    const mu=String(m?.mobileUrl||"").trim();
    if(slug&&(du||mu)) process.stdout.write(slug+"\t"+(du||"")+"\t"+(mu||"")+"\n");
  }
}catch(e){}
' "$preflight_json" | while IFS=$'\t' read -r slug du mu; do
    [[ -z "$slug" ]] && continue
    echo ""
    echo "[run-campaign:v5] exporting modal screen: $slug"
    if [[ -n "$du" && -n "$mu" ]]; then
      scripts/export-frame-jsons.v0.1.3.zsh "$campaign" "modals/$slug" "$du" "$mu"
    elif [[ -n "$du" ]]; then
      scripts/export-frame-jsons.v0.1.3.zsh "$campaign" "modals/$slug" "$du" "$du"
    elif [[ -n "$mu" ]]; then
      scripts/export-frame-jsons.v0.1.3.zsh "$campaign" "modals/$slug" "$mu" "$mu"
    fi
  done
fi

for page in "${pages[@]}"; do
  if [[ "${page:l}" == "isi" ]]; then
    continue
  fi
  echo ""
  echo "[run-campaign:v5] running page: $page"
  scripts/run-one.v5.1.0.zsh "$campaign" "$page"
done

echo ""
echo "[run-campaign:v5] done: campaign=$campaign"
