#!/usr/bin/env bash
# Onboard ACT LED (green on Pi 5) as a bridge-alive indicator.
#
#   bash ethergold_status_led.sh heartbeat   # slow blink while ethergold.service is up
#   bash ethergold_status_led.sh mmc0        # restore SD-activity default
#   bash ethergold_status_led.sh off         # force off (trigger none)
#
# Pi 5: LED is active-low by default — if heartbeat looks inverted, add to
# /boot/firmware/config.txt under [pi5]:  dtparam=act_led_activelow=off
#
# Disable from supervisor: FIXTURE_STATUS_LED=0 in /etc/ethergold/ethergold.env

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 [[ "${EUID}" -ne 0 ]]; then
  exec sudo bash "${BASH_SOURCE[0]}" "$@"
fi

resolve_led() {
  local name
  for name in ACT led0; do
    if [[ -d "/sys/class/leds/${name}" ]]; then
      echo "${name}"
      return 0
    fi
  done
  return 1
}

LED="$(resolve_led)" || {
  echo "ethergold_status_led: no /sys/class/leds/ACT or led0 — skip" >&2
  exit 0
}

MODE="${1:-heartbeat}"
TRIGGER="/sys/class/leds/${LED}/trigger"
BRIGHT="/sys/class/leds/${LED}/brightness"

set_trigger() {
  local t="$1"
  echo none > "${TRIGGER}" 2>/dev/null || true
  if ! echo "${t}" > "${TRIGGER}" 2>/dev/null; then
    echo "ethergold_status_led: trigger ${t} failed on ${LED}" >&2
    return 1
  fi
  echo "ethergold_status_led: ${LED} trigger=${t}"
}

case "${MODE}" in
  heartbeat|mmc0|cpu|default-on|timer)
    set_trigger "${MODE}"
    ;;
  off)
    set_trigger none
    echo 0 > "${BRIGHT}" 2>/dev/null || echo 1 > "${BRIGHT}" 2>/dev/null || true
    ;;
  *)
    echo "usage: $0 heartbeat|mmc0|off" >&2
    exit 1
    ;;
esac
