#!/usr/bin/env bash
# Very basic interface for rbw using rofi
if [ $(hostname) = "syl" ]; then
       if [ $XDG_SESSION_TYPE = "x11" ]; then
           style="laptop-rbw"
           echo "this is x11"
       else
           style="laptop-rbw-wayland"
           echo "this is wayland"
       fi
else 
    style="desktop-rbw"
    #echo "this is not hidpi"
fi

export YDOTOOL_SOCKET=/tmp/ydotools

# Get all password files and create an array
root=~/.password-store
CACHE=~/.local/tmp/pass_rofi
seat=seat0

rbw sync
rbw list

list_passwords() {
    rbw list
}

passwords=$(rbw list)

prompt='BW'
if [ $XDG_SESSION_TYPE = "x11" ]; then
    SECRET=$(list_passwords | rofi -i -p "${prompt}" -dmenu -theme ~/.config/rofi/launchers-git/$style.rasi
             # $@ &
             # c=0
             # while ! xprop -f _KDE_NET_WM_BLUR_BEHIND_REGION 32c -set _KDE_NET_WM_BLUR_BEHIND_REGION 0 -id $(xdotool search -class 'rofi') ; do
             #     sleep .1 
             #     c=$((c+1))
             #     [[ c = 50 ]] && exit; # stop script window didn't appear after 5 seconds
             # done
          )
else
    SECRET=$(list_passwords | rofi -i -p "${prompt}" -dmenu -theme ~/.config/rofi/launchers-git/$style.rasi)
fi

# Ask whether pass, user or both are required
options=("Password" \
             "User" \
             "User and password" \
             "QR-Code" \
	     "OTP")

if [ $XDG_SESSION_TYPE = "x11" ]; then
    option=$(printf '%s\n' "${options[@]%}" | rofi -i -dmenu -p "" -theme ~/.config/rofi/launchers-git/$style.rasi
             # $@ &
             # c=0
             # while ! xprop -f _KDE_NET_WM_BLUR_BEHIND_REGION 32c -set _KDE_NET_WM_BLUR_BEHIND_REGION 0 -id $(xdotool search -class 'rofi') ; do
             #     sleep .1 
             #     c=$((c+1))
             #     [[ c = 50 ]] && exit; # stop script window didn't appear after 5 seconds
             # done
          )
else
    option=$(printf '%s\n' "${options[@]%}" | rofi -i -dmenu -p "" -theme ~/.config/rofi/launchers-git/$style.rasi)
fi

# echo $option

case ${option} in
    Password )
	echo "${SECRET}"
	ydotool type --key-delay 6ms $(rbw get "${SECRET}")
	;;
    User )
	echo "$(rbw get --full "${SECRET}" | rg Username: | awk '{print $2}')"
	ydotool type --key-delay 6ms "$(rbw get --full "${SECRET}" | rg Username: | awk '{print $2}')"
	;;
    "User and password" )
	ydotool type --key-delay 6ms $(rbw get --full "${SECRET}" | rg Username: | awk '{print $2}')
	ydotool key 15:1 15:0
	ydotool type --key-delay 6ms $(rbw get "${SECRET}")
	;;
    "QR-Code" )
	if [[ $SECRET =~ wifi$ ]]; then
	    # Produce a valid wifi QR-code
	    WIFISSID=$(pass get_user "${SECRET}")
	    WIFIPASS=$(pass get_pass "${SECRET}")
	    WIFIQR="WIFI:T:WPA;S:${WIFISSID};P:${WIFIPASS};;"
	    qrencode -s 8 -o - $WIFIQR | feh --title "pass: QR-WIFI" -
	else
	    # Only password
	    pass show -q1 ${SECRET}
	fi
	;;
    OTP )
	ydotool type --key-delay 6ms $(rbw code "${SECRET}")
	;;
esac

# wl-copy -o -s ${seat} ${PASSWD_PASS}