#!/bin/sh

[ -n "$1" ] || exit

. /lib/functions.sh

# retrieve args
OMR_QUOTA_INTERFACE="$1"
shift

# main loop
while true; do
	OMR_QUOTA_REAL_INTERFACE="$(ifstatus $OMR_QUOTA_INTERFACE | jsonfilter -e '@.l3_device')"
	[ -n "$(echo $OMR_QUOTA_INTERFACE | grep '@')" ] && OMR_QUOTA_REAL_INTERFACE=$(ifstatus "$OMR_QUOTA_INTERFACE" | jsonfilter -q -e '@["device"]')
	vnstat_json=$(vnstat -i $OMR_QUOTA_REAL_INTERFACE --json)
	rx_bits=$(echo "$vnstat_json" | jsonfilter -q -e '@.interfaces[0].traffic.month[-1].rx' | tr -d "\n")
	tx_bits=$(echo "$vnstat_json" | jsonfilter -q -e '@.interfaces[0].traffic.month[-1].tx' | tr -d "\n")
	rx=$(( ${rx_bits:-0} / 1024 ))
	tx=$(( ${tx_bits:-0} / 1024 ))
	tt=$((rx + tx))
	iface_up="$(ifstatus $OMR_QUOTA_INTERFACE | jsonfilter -e '@.up')"
	if [ -n "$OMR_QUOTA_RX" ] && [ "$OMR_QUOTA_RX" -gt 0 ] && [ -n "$rx" ] && [ "$OMR_QUOTA_RX" -le "$rx" ]; then
		if [ "$iface_up" = "true" ]; then
			logger -t "OMR-QUOTA" "Set interface $OMR_QUOTA_INTERFACE down, RX quota reached"
			ifdown $OMR_QUOTA_INTERFACE
		fi
	elif [ -n "$OMR_QUOTA_TX" ] && [ "$OMR_QUOTA_TX" -gt 0 ] && [ -n "$tx" ] && [ "$OMR_QUOTA_TX" -le "$tx" ]; then
		if [ "$iface_up" = "true" ]; then
			logger -t "OMR-QUOTA" "Set interface $OMR_QUOTA_INTERFACE down, TX quota reached"
			ifdown $OMR_QUOTA_INTERFACE
		fi
	elif [ -n "$OMR_QUOTA_TT" ] && [ "$OMR_QUOTA_TT" -gt 0 ] && [ -n "$tt" ] && [ "$OMR_QUOTA_TT" -le "$tt" ]; then
		if [ "$iface_up" = "true" ]; then
			logger -t "OMR-QUOTA" "Set interface $OMR_QUOTA_INTERFACE down, RX+TX quota reached"
			ifdown $OMR_QUOTA_INTERFACE
		fi
	elif [ "$iface_up" = "false" ]; then
		logger -t "OMR-QUOTA" "Set interface $OMR_QUOTA_INTERFACE up"
		ifup $OMR_QUOTA_INTERFACE
	fi
	sleep "${OMR_QUOTA_INTERVAL:-60}"
done
