#!/bin/sh

_source="$(uci get nvr.config.nvr_sourcelist)"
_directory="$(uci get nvr.config.storage_directory | sed 's/\/$//')"
_disk_name="$(uci get nvr.config.disk_name)"
_rec_time="$(uci get nvr.config.rec_time)"
_size="$(expr $(uci get nvr.config.storage_size) \* 1024)"
_total_days="$(uci get nvr.config.total_days)"
_loop_write="$(uci get nvr.config.loop_write)"
_fulldisk="$(uci get nvr.config.fulldisk)"
_disk_usage="$(echo $(uci get nvr.config.disk_usage) | cut -d '%' -f1)"
_enable_audio="$(uci get nvr.config.enable_audio)"
_all_clients=""
_disk=""

function detect_disk() {
	if [ "$(df -hT | grep "${_disk_name}")" = "" ];then
		_disk="X"
	else
		_disk=""
	fi
}

function test_totaldays() {
	_dir_nums="$(ls -l $_directory | grep "^d" | wc -l)"
	if [ "$_total_days" -lt "$_dir_nums" ];then
		_first_dir="$(ls -l $_directory | grep "^d" | head -n1 | awk '{print$9}')"
		rm -rf $_directory/$_first_dir
	fi
}

function count_filesize() {
	_client_dir="$(ls -l $_directory/$_day_target | grep "^d" | awk '{print$9}')"
	for c in $_client_dir;do
		_single_filesize="$(ls -l $_directory/$_day_target/$c | head -n1 | awk '{print$5}')"
		if [ "$_single_filesize" = "" ];then
			_single_filesize=0
		else
			_single_filesize="$(expr $_single_filesize / 1024)"
		fi
		_nums_clientdir_file="$(ls -l $_directory/$_day_target/$c | grep "^-" | wc -l)"
		_total_filesize="$(expr $_single_filesize \* $_nums_clientdir_file + $_total_filesize)"
	done
}

function search_daydir_head() {
	_day_target="$(ls -l $_directory | grep "^d" | head -n1 | awk '{print$9}')"
	count_filesize
}

function search_daydir_tail() {                                                                            
	_day_target="$(ls -l $_directory | grep "^d" | tail -n1 | awk '{print$9}')"
	count_filesize
}

function search_daydir_midone() {
	_day_target="$(ls -l $_directory | grep "^d" | head -n2 | tail -n1 | awk '{print$9}')"
	count_filesize
}

function test_dir_space() {
	if [ "$(df -h | grep $_disk_name | awk '{print$5}' | head -n 1 | cut -d '%' -f1)" -ge "$_disk_usage" ];then
		_dir_space="$(expr $_size + 9999)"
	else
		_daydir_num="$(ls -l $_directory | grep "^d" | wc -l)"
		if [ "$_daydir_num" -ge 3 ];then
			_day_target="$(ls -l $_directory | grep "^d" | head -n2 | tail -n1 | awk '{print$9}')"
			_mid_daydir_num="$(expr $_daydir_num - 2)"
			search_daydir_midone
			_total_filesize="$(expr $_total_filesize \* $_mid_daydir_num)"
			search_daydir_head
			search_daydir_tail
		elif [ "$_daydir_num" -eq 2 ];then
			search_daydir_head
			search_daydir_tail
		else
			search_daydir_head
		fi
		_dir_space=$_total_filesize
	fi
}

function test_loopwrite() {
	if [ "$_loop_write" -eq 1 ];then
		_total_filesize=0
		if [ "$_fulldisk" -eq 1 ];then
			if [ "$(df -h | grep $_disk_name | awk '{print$5}' | head -n 1 | cut -d '%' -f1)" -ge "$_disk_usage" ];then
				_dir_space="$(expr $_size + 9999)"
			else
				_dir_space=1
			fi
		else
			test_dir_space
		fi
		while [ "$_dir_space" -ge "$_size" ];do
			_first_dir="$(ls -l $_directory | grep "^d" | head -n1 | awk '{print$9}')"
			_action_dir="$(ls -l $_directory/$_first_dir | grep "^d" | awk '{print$9}')"	
			for i in $_action_dir;do
				rm "$_directory/$_first_dir/$i/$(ls -l $_directory/$_first_dir/$i | grep "^-" | head -n1 | awk '{print$9}')"
				if [ "$(ls -l $_directory/$_first_dir/$i | grep "^-")" = "" ];then
					rm -rf $_directory/$_first_dir/$i
				fi
				if [ "$(ls -l $_directory | grep "^d" | wc -l )" -gt 1 ];then 
					if [ "$(du -s $_directory/$_first_dir | awk '{print$1}')" -le "$(expr $_totalnum \* 4 + 4)" ];then
						rm -rf $_directory/$_first_dir
						break
					fi
				fi
			done
			_total_filesize=0
			if [ "$_fulldisk" -eq 1 ];then
				if [ "$(df -h | grep $_disk_name | awk '{print$5}' | head -n 1 | cut -d '%' -f1)" -ge "$_disk_usage" ];then
					_dir_space="$(expr $_size + 9999)"
				else
					_dir_space=1
				fi
			else
				test_dir_space
			fi
		done
	else
		echo "do not test looping write!"
	fi
}

case $_source in
	hikvision)
		_hik_user="$(uci get nvr.config.hik_user)"
		_hik_pass="$(uci get nvr.config.hik_pass)"
		if [ "$(uci get nvr.config.hik_list)" = "one-by-one" ];then
			_all_clients=$(uci get nvr.config.hikpush)
			_totalnum="$(echo $_all_clients | sed 's/ /\n/g' | wc -l)"
		else
			_ipstart="$(uci get nvr.config.hik_batch_start)"
			_ipend="$(uci get nvr.config.hik_batch_end)"
			_startnum="$(echo $_ipstart | cut -d '.' -f4)"
			_totalnum=$(expr $(echo $_ipend | cut -d '.' -f4) - $(echo $_ipstart | cut -d '.' -f4) + 1)
			for i in $(seq 1 $_totalnum);do
				_all_clients="$_all_clients $(echo $_ipstart | sed 's/[0-9]*$//')$(expr $_startnum + $i - 1)"
			done
		fi
	;;
	tplink)
		_tplink_user="$(uci get nvr.config.tplink_user)"
		_tplink_pass="$(uci get nvr.config.tplink_pass)"
		if [ "$(uci get nvr.config.tplink_list)" = "one-by-one" ];then
			_all_clients=$(uci get nvr.config.tplinkpush)
			_totalnum="$(echo $_all_clients | sed 's/ /\n/g' | wc -l)"
		else
			_ipstart="$(uci get nvr.config.tplink_batch_start)"
			_ipend="$(uci get nvr.config.tplink_batch_end)"
			_startnum="$(echo $_ipstart | cut -d '.' -f4)"
			_totalnum=$(expr $(echo $_ipend | cut -d '.' -f4) - $(echo $_ipstart | cut -d '.' -f4) + 1)
			for i in $(seq 1 $_totalnum);do
				_all_clients="$_all_clients $(echo $_ipstart | sed 's/[0-9]*$//')$(expr $_startnum + $i - 1)"
			done
		fi
	;;
	rtmp-url)
			_all_clients=$(uci get nvr.config.rtmppush)
			_totalnum="$(echo $_all_clients | sed 's/ /\n/g' | wc -l)"
	;;
	multiple-types)
			_all_clients=$(uci get nvr.config.multipush)
			_totalnum="$(echo $_all_clients | sed 's/ /\n/g' | wc -l)"
	;;
	none)
		exit 0
	;;
esac
