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

ROOT="${1:-/home/itahukamedia/public_html/studio.itahukamedia.com/public}"
JS="$ROOT/assets/js/modules/coproducer.inline-main.js"

if [ ! -f "$JS" ]; then
  echo "File not found: $JS" >&2
  exit 1
fi

TS="$(date +%Y%m%d_%H%M%S)"
cp -a "$JS" "$JS.bak.$TS"
echo "Backup created: $JS.bak.$TS"

# 1) Insert debounced scheduler immediately before ensureStudioReturnPublish()
perl -0pi -e '
s#async function ensureStudioReturnPublish\(\)\{\n  await ensureStudioReturnAudio\(\);\n  await refreshStudioReturnVideo\(\);\n\}\n#let __studioReturnRepublishTimer = 0;\n\nfunction scheduleStudioReturnRepublish(delay){\n  const d = Math.max(80, Number(delay || 180));\n  try{ if (__studioReturnRepublishTimer) clearTimeout(__studioReturnRepublishTimer); }catch(_){ }\n  __studioReturnRepublishTimer = setTimeout(()=>{\n    __studioReturnRepublishTimer = 0;\n    Promise.resolve().then(()=>ensureStudioReturnPublish()).catch(()=>{});\n  }, d);\n}\n\nasync function ensureStudioReturnPublish(){\n  await ensureStudioReturnAudio();\n  await refreshStudioReturnVideo();\n}\n#s
' "$JS"

# 2) Replace eager/direct republish calls with scheduled republish
perl -0pi -e '
s#await ensureStudioReturnPublish\(\);#scheduleStudioReturnRepublish(220);#g;
s#(?<!await )ensureStudioReturnPublish\(\);#scheduleStudioReturnRepublish(220);#g;
' "$JS"

# 3) In TAKE block, use a slightly longer delay after real PROGRAM DOM exists
perl -0pi -e '
s#requestAnimationFrame\(\(\)=>\{\s*try\{\s*scheduleStudioReturnRepublish\(220\);\s*\}catch\(_\)\{\}\s*\}\);#requestAnimationFrame(()=>{\n      try{ scheduleStudioReturnRepublish(320); }catch(_){ }\n    });#s
' "$JS"

# 4) Remove forced republish from updateOnAirPanel() redraw path
perl -0pi -e '
s#function updateOnAirPanel\(\)\{\n\s*try\{\s*Promise\.resolve\(\)\.then\(\(\)=>scheduleStudioReturnRepublish\(220\)\)\.catch\(\(\)=>\{\}\);\s*\}catch\(_\)\{\s*\}\n#function updateOnAirPanel(){\n#s
s#function updateOnAirPanel\(\)\{\n\s*try\{\s*Promise\.resolve\(\)\.then\(\(\)=>ensureStudioReturnPublish\(\)\)\.catch\(\(\)=>\{\}\);\s*\}catch\(_\)\{\s*\}\n#function updateOnAirPanel(){\n#s
' "$JS"

chmod 0644 "$JS"

echo
echo "Patched."
echo
echo "Verify these:"
grep -n "scheduleStudioReturnRepublish" "$JS" || true
grep -n "ensureStudioReturnPublish" "$JS" || true
grep -n "function updateOnAirPanel" "$JS" || true
echo
echo "Recommended hard refresh:"
echo "  - coproducer.php"
echo "  - join.php"