#!/bin/sh

nut_driver_config() {
	local cfg="$1"
	local nomatch="$2"

	config_get runas "$cfg" runas "nut"
	config_get vendorid "$cfg" vendorid
	config_get productid "$cfg" productid

	[ "$ACTION" = "add" ] && [ -n "$DEVNAME" ] && {
		chmod 0660 /dev/"$DEVNAME"
		chown "${runas:-root}":"$(id -gn "${runas:-root}")" /dev/"$DEVNAME"
	}

	if [ "$nomatch" = "1" ]; then
		[ "$ACTION" = "add" ] && {
			/etc/init.d/nut-server start "$cfg"
		}
	elif [ "$(printf "%04x" 0x"$pvendid")" = "$vendorid" ] && \
		[ "$(printf "%04x" 0x"$pprodid")" = "$productid" ]; then
			[ "$ACTION" = "add" ] && {
				/etc/init.d/nut-server start "$cfg"
			}
			[ "$ACTION" = "remove" ] && {
				/etc/init.d/nut-server stop "$cfg"
			}
			found=1
	fi
}

perform_libhid_action() {
	. /lib/functions.sh

	local vendorid productid runas
	local pvendid pprodid found

	pvendid=${PRODUCT%/*}
	pvendid=${pvendid%/*}
	pprodid=${PRODUCT%/*}
	pprodid=${pprodid##*/}

	config_load nut_server
	config_foreach nut_driver_config driver 0
	[ "$found" != "1" ] && config_foreach nut_driver_config driver 1
	/etc/init.d/nut-server start upsd
}

[ -n "$PRODUCT" ] && case "$PRODUCT" in
3f0/1/* | \
3f0/1f01/* | \
3f0/1f02/* | \
3f0/1f06/* | \
3f0/1f08/* | \
3f0/1f09/* | \
3f0/1f0a/* | \
3f0/1fe0/* | \
3f0/1fe1/* | \
3f0/1fe2/* | \
3f0/1fe3/* | \
3f0/1fe5/* | \
3f0/1fe6/* | \
3f0/1fe7/* | \
3f0/1fe8/* | \
463/1/* | \
463/ffff/* | \
47c/ffff/* | \
483/35/* | \
4b4/5500/* | \
4d8/d004/* | \
4d8/d005/* | \
50d/375/* | \
50d/551/* | \
50d/750/* | \
50d/751/* | \
50d/900/* | \
50d/910/* | \
50d/912/* | \
50d/980/* | \
50d/f51/* | \
50d/1100/* | \
51d/0/* | \
51d/2/* | \
51d/3/* | \
592/2/* | \
592/4/* | \
5b8/0/* | \
665/5161/* | \
6da/2/* | \
6da/3/* | \
6da/4/* | \
6da/5/* | \
6da/201/* | \
6da/601/* | \
6da/ffff/* | \
75d/300/* | \
764/5/* | \
764/501/* | \
764/601/* | \
925/1234/* | \
9ae/1/* | \
9ae/1003/* | \
9ae/1007/* | \
9ae/1008/* | \
9ae/1009/* | \
9ae/1010/* | \
9ae/2005/* | \
9ae/2007/* | \
9ae/2008/* | \
9ae/2009/* | \
9ae/2010/* | \
9ae/2011/* | \
9ae/2012/* | \
9ae/2013/* | \
9ae/2014/* | \
9ae/3008/* | \
9ae/3009/* | \
9ae/3010/* | \
9ae/3011/* | \
9ae/3012/* | \
9ae/3013/* | \
9ae/3014/* | \
9ae/3015/* | \
9ae/3016/* | \
9ae/4001/* | \
9ae/4002/* | \
9ae/4003/* | \
9ae/4004/* | \
9ae/4005/* | \
9ae/4006/* | \
9ae/4007/* | \
9ae/4008/* | \
d9f/1/* | \
d9f/4/* | \
d9f/a2/* | \
d9f/a3/* | \
d9f/a4/* | \
d9f/a5/* | \
d9f/a6/* | \
f03/1/* | \
10af/1/* | \
10af/4/* | \
10af/8/* | \
14f0/c9/* | \
2b2d/ffff/* | \
ffff/0/* | \
"")
	[ -f /var/run/nut/disable-hotplug ] || \
		/etc/init.d/nut-server enabled && perform_libhid_action
	;;
esac
