#!/bin/sh
# IV-BE6500 / ivorta — WAN status LED
# Internet OK  → green (led-blink-mesh)
# Internet yok → red   (led-blink-pwr)
# airwifi.led.enabled=0 → her iki LED kapalı

RED_LED="${IVORTA_LED_RED:-led-blink-pwr}"
GREEN_LED="${IVORTA_LED_GREEN:-led-blink-mesh}"
INTERVAL="${IVORTA_LED_INTERVAL:-5}"
PING_HOSTS="${IVORTA_LED_PING:-8.8.8.8 1.1.1.1}"
STATE_FILE="/tmp/ivorta-wan-led.state"

led_set() {
  _name="$1"; _on="$2"
  _base="/sys/class/leds/${_name}"
  [ -w "${_base}/brightness" ] || return 0
  [ -w "${_base}/trigger" ] && printf 'none\n' > "${_base}/trigger" 2>/dev/null
  if [ "$_on" = "1" ]; then
    _max="$(cat "${_base}/max_brightness" 2>/dev/null)"
    [ -z "$_max" ] && _max=255
    printf '%s\n' "$_max" > "${_base}/brightness" 2>/dev/null
  else
    printf '0\n' > "${_base}/brightness" 2>/dev/null
  fi
}

leds_off() { led_set "$RED_LED" 0; led_set "$GREEN_LED" 0; }
leds_red() { led_set "$GREEN_LED" 0; led_set "$RED_LED" 1; }
leds_green() { led_set "$RED_LED" 0; led_set "$GREEN_LED" 1; }

led_master_enabled() {
  _v="$(uci -q get airwifi.led.enabled 2>/dev/null)"
  [ "$_v" = "0" ] && return 1
  [ -f /tmp/airwifi-led.state ] && [ "$(cat /tmp/airwifi-led.state 2>/dev/null)" = "false" ] && return 1
  return 0
}

internet_ok() {
  # 1) default route var mı
  ip route get 8.8.8.8 >/dev/null 2>&1 || return 1
  # 2) ping (ilk yanıtlayan yeter)
  for _h in $PING_HOSTS; do
    ping -c 1 -W 2 "$_h" >/dev/null 2>&1 && return 0
  done
  return 1
}

apply() {
  if ! led_master_enabled; then
    leds_off
    echo "off" > "$STATE_FILE"
    return
  fi
  if internet_ok; then
    leds_green
    echo "green" > "$STATE_FILE"
  else
    leds_red
    echo "red" > "$STATE_FILE"
  fi
}

case "$1" in
  once) apply; exit 0 ;;
  green) leds_green; echo green > "$STATE_FILE"; exit 0 ;;
  red) leds_red; echo red > "$STATE_FILE"; exit 0 ;;
  off) leds_off; echo off > "$STATE_FILE"; exit 0 ;;
  daemon|"")
    while true; do
      apply
      sleep "$INTERVAL"
    done
    ;;
  *)
    echo "usage: $0 [daemon|once|green|red|off]" >&2
    exit 1
    ;;
esac
