#!/bin/sh
set -u
umask 077

CONF="/etc/router-egress-emergency-refresh.conf"
RUNNER="/usr/local/sbin/router-egress-emergency-refresh.sh"
HOOK="/usr/local/sbin/router-egress-emergency-decision-hook.sh"
PLANNER="/usr/local/sbin/router-egress-hmn-plan-top5.sh"
POOL="/root/hmn/cache/ok-awg1-strict-foreign-latest.tsv"

fact() {
  printf '__FACT__ %s=%s\n' "$1" "$2"
}

result() {
  name="$1"
  rc="$2"
  value="$3"

  printf '__RESULT__ name=%s rc=%s value=%s\n' \
    "$name" \
    "$rc" \
    "$value"
}

check_command() {
  name="$1"

  if path="$(command -v "$name" 2>/dev/null)"; then
    fact "command.${name}.exists" true
    fact "command.${name}.path" "$path"
  else
    fact "command.${name}.exists" false
    fact "command.${name}.path" MISSING
  fi
}

run_capture() {
  name="$1"
  shift

  temporary="/tmp/step050m06c1.${$}.${name}"

  set +e
  "$@" > "${temporary}.out" 2> "${temporary}.err"
  rc="$?"
  set -e

  stdout="$(
    tr '\n' ' ' < "${temporary}.out" |
      sed 's/[[:space:]][[:space:]]*/ /g'
  )"

  stderr="$(
    tr '\n' ' ' < "${temporary}.err" |
      sed 's/[[:space:]][[:space:]]*/ /g'
  )"

  rm -f \
    "${temporary}.out" \
    "${temporary}.err"

  result "${name}.stdout" "$rc" "${stdout:-EMPTY}"
  result "${name}.stderr" "$rc" "${stderr:-EMPTY}"

  return 0
}

echo "__TRACE__ stage=command_inventory"

for command_name in \
  sh \
  sha256sum \
  sed \
  uci \
  stat \
  date \
  cp \
  awk \
  mv \
  chmod \
  chown \
  wg \
  ip \
  ping \
  grep
do
  check_command "$command_name"
done

echo "__TRACE__ stage=exact_expression_diagnostics"

run_capture \
  config_sha256 \
  sh -c '
    sha256sum "$1" |
      sed "s/[[:space:]].*$//"
  ' sh "$CONF"

run_capture \
  runner_sha256 \
  sh -c '
    sha256sum "$1" |
      sed "s/[[:space:]].*$//"
  ' sh "$RUNNER"

run_capture \
  hook_sha256 \
  sh -c '
    sha256sum "$1" |
      sed "s/[[:space:]].*$//"
  ' sh "$HOOK"

run_capture \
  network_sha256 \
  sh -c '
    uci export network |
      sha256sum |
      sed "s/[[:space:]].*$//"
  '

run_capture \
  pool_sha256 \
  sh -c '
    sha256sum "$1" |
      sed "s/[[:space:]].*$//"
  ' sh "$POOL"

run_capture \
  pool_stat_gnu \
  sh -c '
    stat -c "%Y" "$1"
  ' sh "$POOL"

run_capture \
  pool_stat_busybox \
  sh -c '
    busybox stat -c "%Y" "$1"
  ' sh "$POOL"

run_capture \
  pool_ls_epoch_capability \
  sh -c '
    date -r "$1" +%s
  ' sh "$POOL"

run_capture \
  runner_dryrun \
  "$RUNNER" --dry-run

run_capture \
  hook_dryrun \
  "$HOOK"

run_capture \
  planner_readonly \
  "$PLANNER"

echo "__TRACE__ stage=safety_confirmation"

fact production_modified false
fact backup_created false
fact commit_flag_changed false
fact watcher_invoked false
fact real_refresh_ran false
fact rebalance_apply_ran false
fact direct_failopen_changed false

echo "__TRACE__ stage=complete"
