#!/bin/sh

. /lib/functions.sh
. /lib/functions/service.sh

global=0
config_file="/etc/config/samba4"

wait_for_init() {
	for i in `seq 30`
	do
		if ubus call service list '{"name":"samba4"}' 2>/dev/null | grep -q "samba4"; then
			sleep 2
			return
		fi
		sleep 1
	done
}}

smb_handle() {
	local path
	config_get path "$1" path
	if [ -n "$path" ]; then
		case "$path" in
			"$2" | "$2"/*) global=1 ;;
		esac
		case "$2" in
			"$path" | "$path"/*) global=1 ;;
		esac
	fi
}

chk_en() {
	config_get_bool autoshare "$1" autoshare 1
	[ "$autoshare" -eq 0 ] && exit
}

config_load samba4
config_foreach chk_en samba4

device=`basename "$DEVPATH"`

case "$ACTION" in
	add)

	case "$device" in
		sd*);;
		md*);;
		hd*);;
		mmcblk*);;  
		nvme*);;
		*) return;;
	esac

	path="/dev/$device"

	wait_for_init

	grep -v '/boot\|/opt' /proc/mounts | while read -r j
	do
		str=${j%% *}
		if [ "$str" = "$path" ];then
			strr=${j#* }
			target=${strr%% *}
			global=0

			config_load samba4
			config_foreach smb_handle sambashare "$target"
			
			name=${target#*/mnt/}
			name=$(echo "$name" | sed -e "s/^\///")
			
			if [ "$global" -eq 0 ] ;then
				echo -e "\n\nconfig sambashare" >> $config_file
				echo -e "\toption auto '1'" >> $config_file
				echo -e "\toption name '$name'" >> $config_file
				echo -e "\toption path '$target'" >> $config_file
				echo -e "\toption read_only 'no'" >> $config_file
				echo -e "\toption guest_ok 'yes'" >> $config_file
				echo -e "\toption create_mask '0666'" >> $config_file
				echo -e "\toption dir_mask '0777'" >> $config_file
				echo -e "\toption device '$device'" >> $config_file
				echo -e "\toption force_root '1'" >> $config_file
				/etc/init.d/samba4 reload
				return
			fi
		fi
	done
	;;

	remove)
		i=0
		while true
		do
			if ! uci -q get samba4.@sambashare[$i] >/dev/null; then
				break
			fi

			dev=$(uci -q get samba4.@sambashare[$i].device)
			if [ "$dev" = "$device" ]; then
				auto=$(uci -q get samba4.@sambashare[$i].auto)
				if [ "$auto" = "1" ]; then
					uci delete samba4.@sambashare[$i]
					uci commit samba4
					/etc/init.d/samba4 reload
					return
				fi
			fi
			let i+=1
		done
	;;
esac
