#!/usr/bin/env bash

shopt -s nullglob globstar

typeit=0
if [[ $1 == "--type" ]]; then
	typeit=1
	shift
fi


STARTDIR=${PASSWORD_STORE_DIR-~/.password-store}
BASEDIR=$STARTDIR
DONE=0
LEVEL=0
PREVSELECTION=""
SELECTION=""

while [ "$DONE" -eq 0 ] ; do
	password_files=( "$STARTDIR"/* )
	password_files=( "${password_files[@]#"$STARTDIR"/}" )
	password_files=( "${password_files[@]%.gpg}" )

	if [ "$LEVEL" -ne 0 ] ; then
		password_files=(".." "${password_files[@]}")
	fi
	entry=$(printf '%s\n' "${password_files[@]}" | dmenu "$@" -l 15)

	echo "entry: $entry"
	if [ -z "$entry" ] ; then
		DONE=1
		exit
	fi

	if [ "$entry" != ".." ] ; then
		PREVSELECTION=$SELECTION
		SELECTION="$SELECTION/$entry"

		# check if another dir
		if [ -d "$STARTDIR/$entry" ] ; then
			STARTDIR="$STARTDIR/$entry"
			LEVEL=$((LEVEL+1))
		else
			# not a directory so it must be a real password entry
			if [[ $typeit -eq 0 ]]; then
				pass show -c "$SELECTION" 2>/dev/null
			else
				xdotool - <<<"type --clearmodifiers -- $(pass show "$SELECTION" | head -n 1)"
			fi
			DONE=1
		fi

	else
		LEVEL=$((LEVEL-1))
		SELECTION=$PREVSELECTION
		STARTDIR="$BASEDIR/$SELECTION"
	fi
done