#!/bin/sh
#
# Copyright © 2017 OpenWrt.org
#

. /lib/functions.sh
. /lib/functions/leds.sh
. /usr/share/libubox/jshn.sh

preinit_match_diag_led() {
	local CFG keys key cfg name sysfs default

	CFG=/etc/board.json
	if [ ! -s $CFG ]; then
		CFG=/tmp/board.json
		[ -s /tmp/sysinfo/model ] || return
		/bin/board_detect $CFG || return
	fi

	json_init
	json_load "$(cat $CFG)"
	json_get_keys keys led
	json_is_a led object || return

	json_select led
	for key in $keys; do
		json_select "$key"
		json_get_vars name sysfs default

		if [ "$name" = "DIAG" -a "$default" = "1" ]; then
			status_led="$sysfs"
			return
		fi
		json_select ..
	done
}

match_diag_led() {
	local name
	local default
	local sysfs
	config_get name "$1" name
	config_get default "$1" default
	config_get sysfs "$1" sysfs

	if [ "$name" = "DIAG" -a "$default" = "1" ]; then
		status_led="$sysfs"
	fi
}

get_status_led() {
	if [ -s /etc/config/system ]; then
		config_load system
		config_foreach match_diag_led led
	else
		preinit_match_diag_led
	fi
}

set_state() {
	get_status_led

	case "$1" in
	preinit)
		status_led_blink_preinit
		;;

	failsafe)
		status_led_blink_failsafe
		;;

	preinit_regular)
		status_led_blink_preinit_regular
		;;

	upgrade)
		status_led_blink_preinit_regular
		;;

	done)
		status_led_on
		;;
	esac
}
