#!/usr/bin/env bash
# Field path helpers — prefer /etc/ethergold; fall back to legacy /etc/fixture.
# Source from install/commission/role scripts (not for operator hand-edit).
#
# shellcheck disable=SC2034

ETHERGOLD_ETC="${ETHERGOLD_ETC:-/etc/ethergold}"
ETHERGOLD_ETC_LEGACY="${ETHERGOLD_ETC_LEGACY:-/etc/fixture}"
ETHERGOLD_VAR="${ETHERGOLD_VAR:-/var/lib/ethergold}"
ETHERGOLD_VAR_LEGACY="${ETHERGOLD_VAR_LEGACY:-/var/lib/fixture-prod}"

ETHERGOLD_UNIT="${ETHERGOLD_UNIT:-ethergold.service}"
ETHERGOLD_UNIT_LEGACY="${ETHERGOLD_UNIT_LEGACY:-fixture-prod.service}"
ETHERGOLD_COLLECTOR_UNIT="${ETHERGOLD_COLLECTOR_UNIT:-ethergold-collector.service}"
ETHERGOLD_COLLECTOR_UNIT_LEGACY="${ETHERGOLD_COLLECTOR_UNIT_LEGACY:-fixture-collector.service}"

ETHERGOLD_ENV_FILE="${ETHERGOLD_ETC}/ethergold.env"
ETHERGOLD_ROLE_FILE="${ETHERGOLD_ETC}/role.env"
ETHERGOLD_EDGE_ENV="${ETHERGOLD_ETC}/edge.env"
ETHERGOLD_DISABLE_FILE="${ETHERGOLD_VAR}/disabled"

# Resolve which etc dir has config (prefer new).
ethergold_resolve_etc() {
  if [[ -d "${ETHERGOLD_ETC}" ]] || [[ -f "${ETHERGOLD_ENV_FILE}" ]] || [[ -f "${ETHERGOLD_ROLE_FILE}" ]]; then
    echo "${ETHERGOLD_ETC}"
    return 0
  fi
  if [[ -d "${ETHERGOLD_ETC_LEGACY}" ]]; then
    echo "${ETHERGOLD_ETC_LEGACY}"
    return 0
  fi
  echo "${ETHERGOLD_ETC}"
}

# Prefer new edge.env, else legacy.
ethergold_resolve_edge_env() {
  if [[ -f "${ETHERGOLD_EDGE_ENV}" ]]; then
    echo "${ETHERGOLD_EDGE_ENV}"
    return 0
  fi
  if [[ -f "${ETHERGOLD_ETC_LEGACY}/edge.env" ]]; then
    echo "${ETHERGOLD_ETC_LEGACY}/edge.env"
    return 0
  fi
  echo "${ETHERGOLD_EDGE_ENV}"
}

# One-shot migrate legacy fixture paths → ethergold (idempotent).
ethergold_migrate_legacy_paths() {
  mkdir -p "${ETHERGOLD_ETC}" "${ETHERGOLD_VAR}"
  if [[ -d "${ETHERGOLD_ETC_LEGACY}" ]]; then
    if [[ -f "${ETHERGOLD_ETC_LEGACY}/fixture-pos.env" && ! -f "${ETHERGOLD_ENV_FILE}" ]]; then
      cp -a "${ETHERGOLD_ETC_LEGACY}/fixture-pos.env" "${ETHERGOLD_ENV_FILE}"
    fi
    if [[ -f "${ETHERGOLD_ETC_LEGACY}/edge.env" && ! -f "${ETHERGOLD_EDGE_ENV}" ]]; then
      cp -a "${ETHERGOLD_ETC_LEGACY}/edge.env" "${ETHERGOLD_EDGE_ENV}"
    fi
    if [[ -f "${ETHERGOLD_ETC_LEGACY}/role.env" && ! -f "${ETHERGOLD_ROLE_FILE}" ]]; then
      cp -a "${ETHERGOLD_ETC_LEGACY}/role.env" "${ETHERGOLD_ROLE_FILE}"
    fi
  fi
  if [[ -d "${ETHERGOLD_VAR_LEGACY}" ]]; then
    if [[ -f "${ETHERGOLD_VAR_LEGACY}/disabled" && ! -f "${ETHERGOLD_DISABLE_FILE}" ]]; then
      cp -a "${ETHERGOLD_VAR_LEGACY}/disabled" "${ETHERGOLD_DISABLE_FILE}"
    fi
    if [[ -d "${ETHERGOLD_VAR_LEGACY}/state" && ! -d "${ETHERGOLD_VAR}/state" ]]; then
      cp -a "${ETHERGOLD_VAR_LEGACY}/state" "${ETHERGOLD_VAR}/state"
    fi
  fi
}

# Stop + disable a systemd unit if present.
ethergold_stop_unit() {
  local unit="$1"
  if systemctl list-unit-files "${unit}" >/dev/null 2>&1; then
    systemctl stop "${unit}" 2>/dev/null || true
    systemctl disable "${unit}" 2>/dev/null || true
  fi
}

# After installing new units, retire legacy fixture-* units (keep symlink aliases).
ethergold_retire_legacy_units() {
  for unit in "${ETHERGOLD_UNIT_LEGACY}" "${ETHERGOLD_COLLECTOR_UNIT_LEGACY}"; do
    local path="/etc/systemd/system/${unit}"
    if [[ -L "${path}" ]]; then
      # Symlink alias → new unit; leave in place for cutover.
      continue
    fi
    if [[ -f "${path}" ]]; then
      systemctl stop "${unit}" 2>/dev/null || true
      systemctl disable "${unit}" 2>/dev/null || true
      rm -f "${path}"
    fi
  done
  systemctl daemon-reload 2>/dev/null || true
}

# Restart whichever bridge unit is active (new preferred).
ethergold_restart_bridge_unit() {
  if systemctl list-unit-files "${ETHERGOLD_UNIT}" >/dev/null 2>&1; then
    systemctl restart "${ETHERGOLD_UNIT}" 2>/dev/null || true
    systemctl status "${ETHERGOLD_UNIT}" --no-pager || true
  elif systemctl list-unit-files "${ETHERGOLD_UNIT_LEGACY}" >/dev/null 2>&1; then
    systemctl restart "${ETHERGOLD_UNIT_LEGACY}" 2>/dev/null || true
    systemctl status "${ETHERGOLD_UNIT_LEGACY}" --no-pager || true
  fi
}
