#!/bin/sh

. ../common/ajax_common

if [ "${PALANG}" = "en" ]; then
	LANG001="Error"		#ʧ
	LANG002="Success"	#ɹ
fi


load_exist_wan()
{
	printf "[\"__NULL__\""

	${FLOWEYE} wangroup list  | awk \
	'{
		if(NF < 7) next;
		
		for(i = 7; i <= NF; i++)
			printf ",\"%s\"", $i;
	}'
	
	printf "]"
}


load_self_wan()
{
	printf "[\"__NULL__\""

	${FLOWEYE} wangroup list  | grep "^${CGI_id} " | awk \
	'{
		if(NF < 7) next;
		
		for(i = 7; i <= NF; i++)
			printf ",\"%s\"", $i;
	}'

	printf "]"
}


load_add_wan_env()
{
	printf "{"
	printf "\"wan\":[`${FLOWEYE} nat listproxy onlystat=1 json=1 type=wan`],"
	printf "\"self\":`load_self_wan`,"
	printf "\"pool\":`load_exist_wan`"
	printf "}"
}


list_wan_group()
{
	${FLOWEYE} wangroup list | grep -i "${CGI_keyword}" | awk \
	'BEGIN{
		dot = "";
		printf "[";
	}{
		col = 1;

		printf "%s", dot;
		printf "{";
		printf "\"id\":\"%s\",", $(col++);
		printf "\"name\":\"%s\",", $(col++);
		printf "\"pxycnt\":\"%s\",", $(col++);
		printf "\"type\":\"%s\",", $(col++);
		printf "\"inbps\":\"%s\",", $(col++);
		printf "\"outbps\":\"%s\"", $(col++);
		printf "}";
		if( dot == "") dot = ",";
	}END{
		printf "]";
	}'
}


add_wan_group()
{
	cmdargs="name=${CGI_name} type=${CGI_type}"
	errmsg=`${FLOWEYE} wangroup add ${cmdargs}`

	if [ $? -ne 0 ]; then
		retjson 1 "ʧ:${errmsg}"
	else
		sync_floweye "wangroup add ${cmdargs}"
		WEB_LOGGER "WAN·Ⱥ" "${cmdargs}"
		retjson 0 "ɹ"
	fi
}


set_wan_group()
{
	cmdargs="id=${CGI_id} name=${CGI_name} type=${CGI_type}"
	errmsg=`${FLOWEYE} wangroup set ${cmdargs}`
	
	if [ $? -ne 0 ]; then
		retjson 1 "${LANG001:=ʧ}${errmsg}"
	else
		sync_floweye "wangroup set ${cmdargs}"
		WEB_LOGGER "༭WAN·Ⱥ" "${cmdargs}"
		retjson 0 "${LANG002:=ɹ}"
	fi
}


rmv_wan_group()
{
	errmsg=`${FLOWEYE} wangroup remove id=${CGI_id}`
	
	if [ $? -ne 0 ]; then
		retjson 1 "${LANG001:=ʧ}${errmsg}"
	else
		sync_floweye " wangroup remove id=${CGI_id}"
		WEB_LOGGER "ɾWAN·Ⱥ" "id=${CGI_id} name=${CGI_name}"
		retjson 0 "${LANG002:=ɹ}"
	fi
}


get_wg_id()
{
	${FLOWEYE} wangroup list | awk \
	-v name=${CGI_wg_name} \
	'{
		if($2 != name) next;
		printf "{";
		printf "\"id\":\"%s\",", $1;
		printf "\"type\":\"%s\"", $4;
		printf "}";
	}'
}


get_wan_group()
{
	if [ "${CGI_id}" = "" ]; then
		printf "{\"data\":[],\"total\":0}"
		return
	fi

	if [ "${CGI_type}" = "failover" ]; then
		[ "${CGI_sort_key}"  = "" ] && CGI_sort_key="weight"
		[ "${CGI_sort_type}" = "" ] && CGI_sort_type="asc"
	fi

	case "${CGI_sort_key}" in
		"pxyname")
			sortval="k2"
			;;

		"weight")
			sortval="k5"
			;;

		"inbps")
			sortval="k6"
			;;

		"outbps")
			sortval="k7"
			;;

		"dnsreqs")
			sortval="k8"
			;;

		*)
			sortval="k2"
			;;
	esac

	if [ "${CGI_sort_type}" = "desc" ]; then
		sortval="-nr${sortval}"
	else
		sortval="-n${sortval}"
	fi

	end=$((${CGI_page} * ${CGI_limit}))
	start=$((${end} - ${CGI_limit}))

	${FLOWEYE} wangroup get id="${CGI_id}" showproxy=1 | grep -i "${CGI_keyword}" | sort ${sortval} | awk \
	-v end=${end} -v start=${start} \
	'BEGIN{
		dot = "";
		row = 0;
		printf "{\"data\":[";
	}{		
		row++
		if(row > end || row < start) next;
		
		col = 1;

		printf "%s{", dot;
		printf "\"type\":\"%s\",", $(col++);
		printf "\"id\":\"%s\",", $(col++);
		printf "\"name\":\"%s\",", $(col++);
		printf "\"state\":\"%s\",", $(col++);
		printf "\"weight\":\"%s\",", $(col++);
		printf "\"inbps\":\"%s\",", $(col++);
		printf "\"outbps\":\"%s\",", $(col++);
		printf "\"dnsreqs\":\"%s\",", $(col++);
		printf "\"dnsfailrate\":\"%s\"", $(col++);
		printf "}";
		
		if ( dot == "") dot = ",";
	}END{
		printf "],\"total\":%s}", row;
	}'
}


add_wan_to_group()
{
	for item in `echo ${CGI_wan_list} | tr "," " "`
    do
        name=`echo ${item} | cut -d":" -f1`
        weight=`echo ${item} | cut -d":" -f2`

        errmsg=`${FLOWEYE} wangroup set id=${CGI_group_id} proxy=${name} weight=${weight}`
		
		[ $? -ne 0 ] && retjson 1 "${LANG001:=ʧ}${errmsg}"
		sync_floweye "wangroup set id=${CGI_group_id} proxy=${name} weight=${weight}"
    done
    
	WEB_LOGGER "·Ⱥ·" "wg=${CGI_group_id}"
	retjson 0 "${LANG002:=ɹ}"
}


edit_wg_wan()
{
	errmsg=`${FLOWEYE} wangroup set id=${CGI_id} proxy=${CGI_proxy} weight=${CGI_weight}`
	
	if [ $? -ne 0 ]; then
		retjson 1 "${LANG001:=ʧ}${errmsg}"
	else
		sync_floweye "wangroup set id=${CGI_id} proxy=${CGI_proxy} weight=${CGI_weight}"
		retjson 0 "${LANG002:=ɹ}"
	fi
}


bedit_wg_wan()
{
	for line in `echo ${CGI_wans} | tr "|" " "`
	do
		wan=`echo ${line} | cut -d":" -f1`
		weight=`echo ${line} | cut -d":" -f2`
		${FLOWEYE} wangroup set id=${CGI_old_id} proxy=${wan} weight=-1
		sync_floweye "wangroup set id=${CGI_old_id} proxy=${wan} weight=-1"
		${FLOWEYE} wangroup set id=${CGI_new_id} proxy=${wan} weight=${weight}
		sync_floweye "wangroup set id=${CGI_new_id} proxy=${wan} weight=${weight}"
	done
	
	retjson 0 "${LANG002:=ɹ}"
}


bset_wan_weight()
{
	[ "${CGI_weight}" = "" ] && retjson 1 "INV_WEIGHT"

	for wan in ${CGI_wans}
	do
		errmsg=`${FLOWEYE} wangroup set id=${CGI_wg} proxy=${wan} weight=${CGI_weight}`
		[ $? -ne 0 ] && retjson 1 "${LANG001:=ʧ}${errmsg}"
		sync_floweye "wangroup set id=${CGI_wg} proxy=${wan} weight=${CGI_weight}"
	done
	
	WEB_LOGGER "༭·ȺȨֵ" "wg=${CGI_wg}"
	retjson 0 "${LANG002:=ɹ}"
}


rmv_wg_wan()
{
	errmsg=`${FLOWEYE} wangroup set id=${CGI_id} proxy=${CGI_proxy} weight=-1`
	
	if [ $? -ne 0 ]; then
		retjson 1 "${LANG001:=ʧ}${errmsg}"
	else
		sync_floweye "wangroup set id=${CGI_id} proxy=${CGI_proxy} weight=-1"
		WEB_LOGGER "·Ⱥɾ·" "id=${CGI_id}"
		retjson 0 "${LANG002:=ɹ}"
	fi
}


brmv_wg_wan()
{
	for wan in `echo ${CGI_wans} | tr "|" " "`
	do
		errmsg=`${FLOWEYE} wangroup set id=${CGI_id} proxy=${wan} weight=-1`
		[ $? -ne 0 ] && retjson 1 "${LANG001:=ʧ}${errmsg}"
		sync_floweye "wangroup set id=${CGI_id} proxy=${wan} weight=-1"
	done
	
	WEB_LOGGER "·Ⱥɾ·" "id=${CGI_id}"
	retjson 0 "${LANG002:=ɹ}"
}


case "${CGI_action}" in
	"list_wan_group")
		retjson 0 "OK" "`list_wan_group`"
		;;

	"get_wg_id")
		retjson 0 "OK" "`get_wg_id`"
		;;

	"get_wan_group")
		retjson 0 "OK" "`get_wan_group`"
		;;

	"add_wan_group")
		action_check
		add_wan_group
		;;

	"set_wan_group")
		action_check
		set_wan_group
		;;

	"rmv_wan_group")
		action_check
		rmv_wan_group
		;;

	"load_add_wan_env")
		retjson 0 "OK" "`load_add_wan_env`"
		;;
	
	"add_wan_to_group")
		action_check
		add_wan_to_group
		;;

	"edit_wg_wan")
		action_check
		edit_wg_wan
		;;
		
	"bedit_wg_wan")
		action_check
		bedit_wg_wan
		;;

	"bset_wan_weight")
		action_check
		bset_wan_weight
		;;

	"rmv_wg_wan")
		action_check
		rmv_wg_wan
		;;

	"brmv_wg_wan")
		action_check
		brmv_wg_wan
		;;

	*)
		retjson 1 "UNKNOW_ACTION!"
		;;

esac
