#!/usr/bin/env bash
# Single EtherGold operator entry — everything from env files, not CLI prefixes.
#
# Loads (via source_ethergold_env + edge.env):
#   ETHERGOLD_ROLE=topbox|listen|edge   (/etc/ethergold/role.env)
#   EDGE_MODE=0|1                       (/etc/ethergold/edge.env)
#   FIXTURE_POS, CHANNEL, FIXTURE_PROD  (~/EtherGold/fixture-bridge.env)
#   ETHERGOLD_PROFILE=prod|bench        (or implied by FIXTURE_PROD=0 / ETHERGOLD_BENCH=1)
#
# Usage (same on every seat after pull):
#   cd ~/EtherGold/dev && bash run_ethergold.sh
#
# EDGE seats re-exec under sudo -E automatically when not root.
# One-shot overrides still work if you really need them (FIXTURE_POS=… etc.).

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

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

# Preserve explicit shell overrides; env files fill the rest.
_CLI_POS="${FIXTURE_POS-}"
_CLI_CHANNEL="${CHANNEL-}"
_CLI_PROFILE="${ETHERGOLD_PROFILE-}"
_CLI_ROLE="${ETHERGOLD_ROLE-}"
_CLI_PROD="${FIXTURE_PROD-}"

for _sync in \
  "${ETHERGOLD_SYNC:-}" \
  "${SCRIPT_DIR}/../sync" \
  "/home/topbox/EtherGold/sync"; do
  if [[ -f "${_sync}/source_ethergold_env.sh" ]]; then
    # shellcheck source=/dev/null
    source "${_sync}/source_ethergold_env.sh"
    break
  fi
  if [[ -f "${_sync}/source_fixture_env.sh" ]]; then
    # shellcheck source=/dev/null
    source "${_sync}/source_fixture_env.sh"
    break
  fi
done
unset _sync

if [[ -n "${_CLI_POS}" ]]; then export FIXTURE_POS="${_CLI_POS}"; fi
if [[ -n "${_CLI_CHANNEL}" ]]; then export CHANNEL="${_CLI_CHANNEL}"; fi
if [[ -n "${_CLI_PROFILE}" ]]; then export ETHERGOLD_PROFILE="${_CLI_PROFILE}"; fi
if [[ -n "${_CLI_ROLE}" ]]; then export ETHERGOLD_ROLE="${_CLI_ROLE}"; fi
if [[ -n "${_CLI_PROD}" ]]; then export FIXTURE_PROD="${_CLI_PROD}"; fi
unset _CLI_POS _CLI_CHANNEL _CLI_PROFILE _CLI_ROLE _CLI_PROD

# Canonical edge config: /etc/ethergold/edge.env. Legacy /etc/fixture/edge.env
# is a symlink on provisioned seats (fallback only for unmigrated boxes).
if [[ -f /etc/ethergold/edge.env ]]; then
  set -a
  # shellcheck disable=SC1091
  source /etc/ethergold/edge.env
  set +a
elif [[ -f /etc/fixture/edge.env ]]; then
  set -a
  # shellcheck disable=SC1091
  source /etc/fixture/edge.env
  set +a
fi

# role.env may already be sourced; keep EDGE_MODE authoritative for transport.
EDGE_MODE="${EDGE_MODE:-0}"
ROLE="${ETHERGOLD_ROLE:-topbox}"
# edge.env / enable_edge imply edge role when MODE=1
if [[ "${EDGE_MODE}" == "1" && "${ROLE}" != "listen" ]]; then
  ROLE="edge"
fi

profile="${ETHERGOLD_PROFILE:-}"
if [[ -z "${profile}" ]]; then
  if [[ "${ETHERGOLD_BENCH:-0}" == "1" || "${FIXTURE_PROD:-}" == "0" || "${POG_EDGE_BENCH:-0}" == "1" ]]; then
    profile="bench"
  else
    profile="prod"
  fi
fi
export ETHERGOLD_PROFILE="${profile}"
export ETHERGOLD_ROLE="${ROLE}"
export EDGE_MODE
export EDGE_TOPOLOGY="${EDGE_TOPOLOGY:-}"
export EDGE_ROLE="${EDGE_ROLE:-}"
export EDGE_BANK="${EDGE_BANK:-0}"
export EDGE_SPOKE_ID="${EDGE_SPOKE_ID:-}"
export EDGE_UPLINK="${EDGE_UPLINK:-}"
export EDGE_BANK_WLAN="${EDGE_BANK_WLAN:-0}"

echo "=== run_ethergold: role=${ROLE} EDGE_MODE=${EDGE_MODE} topo=${EDGE_TOPOLOGY:--} profile=${profile} pos=${FIXTURE_POS:-?} uplink=${EDGE_UPLINK:--} ==="

# EDGE needs root for wg/gretap — re-exec with sudo -E (preserve env).
if [[ "${EDGE_MODE}" == "1" && "${ROLE}" != "listen" && "${EUID}" -ne 0 ]]; then
  echo "EDGE_MODE=1: elevating with sudo -E …" >&2
  exec sudo -E bash "${BASH_SOURCE[0]}" "$@"
fi

export ETHERGOLD_ENTRY=1

if [[ "${ROLE}" == "listen" ]]; then
  if [[ "${profile}" == "bench" ]]; then
    exec bash "${SCRIPT_DIR}/run_listen_jun11_good.sh" "$@"
  fi
  exec bash "${SCRIPT_DIR}/run_listen_prod.sh" "$@"
fi

if [[ "${EDGE_MODE}" == "1" ]]; then
  if [[ "${profile}" == "bench" ]]; then
    exec bash "${SCRIPT_DIR}/pog-edge/run_bridge_edge_bench.sh" "$@"
  fi
  exec bash "${SCRIPT_DIR}/run_bridge_edge_prod.sh" "$@"
fi

if [[ "${profile}" == "bench" ]]; then
  exec bash "${SCRIPT_DIR}/run_bridge_jun11_good.sh" "$@"
fi
exec bash "${SCRIPT_DIR}/run_bridge_prod.sh" "$@"
