#!/usr/bin/env bash
# Unified Dropbox pull — EtherGold fixture + DyzineFrame deploy (one rclone session per tree).
#
# Run from ~/EtherGold/sync (preferred):
#   bash pull_all_from_dropbox.sh
#   DRY_RUN=1 bash pull_all_from_dropbox.sh
#
# Skip parts:
#   SKIP_ETHERGOLD=1 bash pull_all_from_dropbox.sh
#   SKIP_DYZINEFRAME=1 bash pull_all_from_dropbox.sh
#
# DyzineFrame: stage only by default (promote 03:00 Atlantic or next boot / Update Now).
#   PROMOTE_DYZINEFRAME=1  — promote staging to live after pull
#   PROMOTE_RESTART=1      — restart supervisor after promote (default 0; restart locally)
#   PROMOTE_NOW=1          — alias for PROMOTE_DYZINEFRAME=1 (bench escape hatch)
#
# Bench profile (disable prod, autostart, etc.):
#   APPLY_BENCH_PROFILE=1 bash pull_all_from_dropbox.sh
#   — or use pull_and_apply_bench.sh
#
# Aliases: pull_from_dropbox.sh (EtherGold/sync and DyzineFrame/sync)

if grep -q $'\r' "${BASH_SOURCE[0]}" 2>/dev/null; then
  sed -i 's/\r$//' "${BASH_SOURCE[0]}"
  exec bash "${BASH_SOURCE[0]}" "$@"
fi

set -euo pipefail

if [[ "$(id -un)" == root ]]; then
  echo "FATAL: do not run pull as root/sudo." >&2
  exit 1
fi

SYNC="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

if [[ "${PROMOTE_NOW:-0}" == "1" ]]; then
  PROMOTE_DYZINEFRAME="${PROMOTE_DYZINEFRAME:-1}"
fi
PROMOTE_DYZINEFRAME="${PROMOTE_DYZINEFRAME:-0}"
PROMOTE_RESTART="${PROMOTE_RESTART:-0}"

_resolve_dyzineframe_sync() {
  if [[ -n "${DYZINEFRAME_SYNC:-}" ]] && [[ -f "${DYZINEFRAME_SYNC}/stage_from_dropbox.sh" ]]; then
    echo "${DYZINEFRAME_SYNC}"
    return 0
  fi
  local candidate
  for candidate in \
    "${HOME}/DyzineFrame/sync" \
    "${HOME}/DyzineFrame/4-Board Test Fixture/sync"; do
    if [[ -f "${candidate}/stage_from_dropbox.sh" ]]; then
      echo "${candidate}"
      return 0
    fi
  done
  return 1
}

_pull_ethergold() {
  echo ""
  echo "=============================================================================="
  echo "pull_all (1/2): EtherGold dev + sync (flat)"
  echo "=============================================================================="
  bash "${SYNC}/pull_fixture_shared_from_dropbox.sh"
}

_pull_dyzineframe() {
  local df_sync
  if ! df_sync="$(_resolve_dyzineframe_sync)"; then
    echo ""
    echo "pull_all: DyzineFrame sync not found — skip (set SKIP_DYZINEFRAME=1 to silence)"
    return 0
  fi

  echo ""
  echo "=============================================================================="
  echo "pull_all (2/2): DyzineFrame deploy"
  echo "  sync: ${df_sync}"
  echo "=============================================================================="

  bash "${df_sync}/stage_from_dropbox.sh"

  if [[ "${DRY_RUN:-0}" == "1" ]]; then
    echo "DRY_RUN=1 — skip DyzineFrame promote"
    return 0
  fi

  if [[ "${PROMOTE_DYZINEFRAME}" == "1" ]]; then
    FORCE=1 PROMOTE_RESTART="${PROMOTE_RESTART}" bash "${df_sync}/promote_staging.sh"
  else
    echo "PROMOTE_DYZINEFRAME=0 — staged only; promote with:"
    echo "  FORCE=1 bash ${df_sync}/promote_staging.sh"
  fi
}

if [[ "${SKIP_ETHERGOLD:-0}" != "1" ]]; then
  _pull_ethergold
else
  echo "SKIP_ETHERGOLD=1 — EtherGold fixture pull skipped"
fi

if [[ "${SKIP_DYZINEFRAME:-0}" != "1" ]]; then
  _pull_dyzineframe
else
  echo "SKIP_DYZINEFRAME=1 — DyzineFrame pull skipped"
fi

if [[ "${APPLY_BENCH_PROFILE:-0}" == "1" ]]; then
  echo ""
  echo "=============================================================================="
  echo "pull_all: apply_bench_profile"
  echo "=============================================================================="
  bash "${SYNC}/apply_bench_profile.sh"
fi

echo ""
echo "=============================================================================="
echo "pull_all complete"
if [[ -f "${HOME}/DyzineFrame/VERSION.txt" ]]; then
  echo "DyzineFrame live: $(cat "${HOME}/DyzineFrame/VERSION.txt")"
fi
echo "Restart locally when ready: bridge + ~/DyzineFrame/runit.sh (or run_supervisor.sh)"
echo "=============================================================================="
