#!/bin/sh

_gpg-unlock
set -xe

find_file() {
  fd --strip-cwd-prefix '\.gpg$' |
  sd ".gpg$" "" |
  wdmenu -p "Password" $@
}

print_actions_for_entry() {
  echo "Autotype"
  if test -n "$username"; then
    echo "Username -> $username"
  fi
  echo "Password"
  if test -n "$otp"; then
    echo "OTP"
  fi

  echo "$entry_content" | \
    rg '^(\w+): .*$' --replace '$1' | \
    sed \
      -e '/login/d' \
      -e '/user/d' \
      -e '/email/d'
}

main() {
    test -n "$PASSWORD_STORE_DIR" &&
      cd "$PASSWORD_STORE_DIR" ||
      cd "$HOME/.password-store"

    entry=`find_file "$@"`

    test -n "$entry" || exit 0

    entry_content="$(pass show "$entry" 2>/dev/null)" || true
    username=`echo "$entry_content" | rg -m1 '(login|user|email): (.*)' -r '$2'` || true
    password=`echo "$entry_content" | head -n 1` || true
    otp=`pass otp "$entry" 2>/dev/null` || true

    action="$(print_actions_for_entry | wdmenu -p Action)"

    case $action in
        Autotype)
            autotype
            ;;
        Username*)
            printf '%s' "$username" | wl-copy;;
        Password)
            printf '%s' "$password" | wl-copy;;
        OTP)
            pass otp "$entry" | wl-copy;;
        *)
            key="$action"
            printf '%s\n' "$entry_content"  | rg -m1 "^$key: (.*)" -r '$1' | wl-copy -n
            ;;
    esac

}

autotype(){
    if test -n "$username"; then
        env wtype -s 100 "$username"
        env wtype -s 100 -k tab
    fi
    env wtype -s 100 "$password"
}

main
