#!/bin/bash

# i3exit
#
# Provide simple arguments for various locking and power related tasks.

# with openrc use loginctl
[[ $(cat /proc/1/comm) == "systemd" ]] && logind=systemctl || logind=loginctl

LOCK_SCREEN_COLOR=${LOCK_SCREEN_COLOR:-000000}
I3LOCK_RE="i3lock -(c|i) "

lock() {
    i3lock -c "$LOCK_SCREEN_COLOR"

    # Add a small delay to prevent possible race conditions with suspend
    sleep 1
}

is_locked() {
    pgrep -u "$USER" -f "$I3LOCK_RE" >/dev/null
}

case "$1" in
    lock)
        is_locked || lock
        ;;
    logout)
        i3-msg exit
        ;;
    switch_user)
        dm-tool switch-to-greeter
        ;;
    suspend)
        lock && $logind suspend
        ;;
    hibernate)
        lock && $logind hibernate
        ;;
    reboot)
        $logind reboot
        ;;
    shutdown)
        $logind poweroff
        ;;
    commands)
        echo "lock,logout,switch_user,suspend,hibernate,reboot,shutdown"
        ;;
    help)
        cmds="$($0 commands)"
        echo "Usage: $0 ${cmds//\,/\, }"
        ;;
    *)
        echo "== ! i3exit: missing or invalid argument ! =="
        $0 help
        exit 2
        ;;
esac

exit 0