#!/usr/bin/bash

if [ $# -eq 0 ]; then
	path=$(realpath .)
	echo "usage: $(basename "$0") [/path/to/packetfence/folder/to/sync]"
else
	path=$(realpath $1)
fi

pf_directory=$path
while [ ! -e "$pf_directory/conf/pf-release" ] && [ "x$pf_directory" != x/ ]; do
		pf_directory="$(dirname $pf_directory)/"
done
if [ "x$pf_directory" == x/ ]; then
	echo "$path is not a packetfence directory"
	exit 1
fi
e=""
pf_folder="${path//${pf_directory}/${e}}"
if [[ ! -d "$pf_directory/$pf_folder" ]]
then
    echo "$pf_directory/$pf_folder does not exist"
		exit 1
fi

user=$(whoami)
vagrant_hosts=$(yq -r ".all.vars.users_vars.$user.vms | keys | .[]" $pf_directory/addons/vagrant/inventory/hosts | grep '^pf.*$')
declare -A ips
declare -A hosts
echo -n "scanning vagrant hosts: "
for host in $vagrant_hosts; do
	ip=$(yq -r ".all.vars.users_vars.$user.vms.$host.ip" $pf_directory/addons/vagrant/inventory/hosts)
	if ping -W 1 -c 1 $ip &> /dev/null; then
		ips[$host]=$ip
		hosts[$ip]=$host
		echo -n "*"
	else
		echo -n "."
	fi
done
echo ""

for ip in ${ips[@]}; do
	echo "sync ${hosts[$ip]} $ip"
done

echo "watching $path"
while true; do
 	inotifywait -r -e modify,attrib,close_write,move,create,delete $pf_directory/$pf_folder
	for ip in ${ips[@]}; do
		echo "=========================="
		echo "sync $ip"
		rsync -avz --exclude="*.swp" --exclude="vars/local.yml" --rsync-path="sudo rsync" -e "ssh" $pf_directory/$pf_folder/ $ip:/usr/local/pf/${pf_folder}/
		echo "=========================="
	done
done
