#!/usr/bin/env sh

#### Environment Variable Options ###
# Interface options
# ROFI_POWERMENU_SHOW_ICONS=1
# ROFI_POWERMENU_SHOW_TEXT=0
#  Command options
# ROFI_POWERMENU_SHUTDOWN_CMD=""
# ROFI_POWERMENU_REBOOT_CMD=""
# ROFI_POWERMENU_LOCKSCREEN_CMD=""
# ROFI_POWERMENU_LOGOUT_CMD=""
# ROFI_POWERMENU_SUSPEND_CMD=""

#### Menu Options ###
if [ "${ROFI_POWERMENU_SHOW_TEXT:-0}" -eq 0 ] && [ "${ROFI_POWERMENU_SHOW_ICONS:-1}" -eq 0 ]; then
  echo "You disabled both text and icons for rofi-powermenu, nothing can be shown."
  exit 1
elif [ "${ROFI_POWERMENU_SHOW_ICONS:-1}" -eq 1 ]; then
  power_off_btn=""
  reboot_btn=""
  lock_btn=""
  suspend_btn="鈴"
  logout_btn=""
fi
if [ "${ROFI_POWERMENU_SHOW_TEXT:-0}" -eq 1 ]; then
  power_off_btn="${power_off_btn} Shut Down"
  reboot_btn="${reboot_btn} Restart"
  lock_btn="${lock_btn} Lock Screen"
  suspend_btn="${suspend_btn} Suspend"
  logout_btn="${logout_btn} Log Out"
fi

# grep -a since it assumes with our nullcodes etc that this is a binary file
# grep -o to only leave the things we grep for
case $(echo "$*" | grep -a -o -e "Shutdown" -e "Reboot" -e "Lockscreen" -e "Logout" -e "Suspend") in
"Shutdown")
  if [ -n "$ROFI_POWERMENU_SHUTDOWN_CMD" ]; then eval "$ROFI_POWERMENU_SHUTDOWN_CMD"; else
    systemctl poweroff
  fi
  ;;
"Reboot")
  if [ -n "$ROFI_POWERMENU_REBOOT_CMD" ]; then eval "$ROFI_POWERMENU_REBOOT_CMD"; else
    systemctl reboot
  fi
  ;;
"Lockscreen")
  # Completely detach from the parent script
  # If in/outputs are not redirected, rofi will wait for the forked process as well.
  if [ -n "$ROFI_POWERMENU_LOCKSCREEN_CMD" ]; then eval "$ROFI_POWERMENU_LOCKSCREEN_CMD"; else
    lockscreen rofi </dev/null >/dev/null 2>/dev/null &
  fi
  ;;
"Logout")
  if [ -n "$ROFI_POWERMENU_LOGOUT_CMD" ]; then eval "$ROFI_POWERMENU_LOGOUT_CMD"; else
    i3-msg exit
  fi
  ;;
"Suspend")
  if [ -n "$ROFI_POWERMENU_SUSPEND_CMD" ]; then eval "$ROFI_POWERMENU_SUSPEND_CMD"; else
    lockscreen rofi </dev/null >/dev/null 2>/dev/null &
    systemctl suspend
  fi
  ;;
esac

if [ -z "$*" ]; then
  printf "\x00prompt\x1fPower> \n"
  # we can use pango markup to hide text which we can then search. Neat!
  printf "\0markup-rows\x1ftrue\n"

  printf "<!-- Shutdown Poweroff --> %s\n" "$power_off_btn"
  printf "<!-- Reboot Restart --> %s\n" "$reboot_btn"
  printf "<!-- Lockscreen --> %s\n" "$lock_btn"
  printf "<!-- Suspend Sleep --> %s\n" "$suspend_btn"
  printf "<!-- Exit X Logout --> %s\n" "$logout_btn"
fi