#!/usr/bin/env sh

# Description: Update nnn plugins
#
# Shell: POSIX compliant
# Author: Arun Prakash Jana, KlzXS

CONFIG_DIR=${XDG_CONFIG_HOME:-$HOME/.config}/nnn/
PLUGIN_DIR=${XDG_CONFIG_HOME:-$HOME/.config}/nnn/plugins

is_cmd_exists () {
    which "$1" > /dev/null 2>&1
    echo $?
}

merge () {
	vimdiff $1 $2
}

prompt () {
	echo "Plugin $1 already exists and is different."
	echo -n "Keep (k), merge (m), overwrite (o) [default: k]? "
	read operation

	if [ "$operation" = "m" ]; then
		op="merge"
	elif [ "$operation" = "o" ]; then
		op="cp -vRf"
	else
		op="true"
	fi
}

if [ "$(is_cmd_exists sudo)" -eq "0" ]; then
    sucmd=sudo
elif [ "$(is_cmd_exists doas)" -eq "0" ]; then
    sucmd=doas
else
    sucmd=: # noop
fi

# backup any earlier plugins
if [ -d $PLUGIN_DIR ]; then
    tar -C $CONFIG_DIR -czf $CONFIG_DIR"plugins-$(date '+%Y%m%d%H%M').tar.gz" plugins/
fi

mkdir -p $PLUGIN_DIR
cd $CONFIG_DIR
curl -Ls -O https://github.com/jarun/nnn/archive/master.tar.gz
tar -zxf master.tar.gz

cd nnn-master/plugins
for f in *; do
	if [ -f ../../plugins/$f ]; then
		if [ "$(diff --brief $f ../../plugins/$f)" ]; then
			prompt $f
			$op $f ../../plugins/
		fi
	else
		cp -vRf $f ../../plugins/
	fi
done
cd ../..

$sucmd mv -vf nnn-master/misc/nlaunch/nlaunch /usr/local/bin/
rm -rf nnn-master/ master.tar.gz $PLUGIN_DIR/README.md