#!/usr/bin/env bash

# manjaro-polybar-pipemenu - an Openbox pipemenu for polybar manipulation
# Written for Manjaro by Nathaniel Maia <natemaaia10@gmail.com> 2017

readonly COMMON_INCLUDE="/usr/lib/manjaro/common/include.cfg"

if ! . "$COMMON_INCLUDE" 2>/dev/null; then
    echo $"Error: Failed to source $COMMON_INCLUDE" >&2 ; exit 1
fi

readonly CONFIG_PATH="$HOME/.config/polybar"
readonly HELP='
\tmanjaro-polybar-pipemenu is an Openbox Pipe Menu for Polybar
\tIt should normally be called from an openbox menu.
\nOptions:
\t-h --help   show this message
\n\tIf manjaro-polybar-pipemenu is called with no options (the usual method),
\tit will output an xml openbox pipemenu for handling polybar sessions,
\tand editing configuration files.
\nFor more information, see "man polybar"
and "Help">"Polybar" in the Manjaro menu.'

case "$@" in
    -h|--help) echo -e "$HELP" ; exit 0
esac

CONFIG="$CONFIG_PATH/config"

running_bars() {
    if [[ $(pidof polybar) ]]; then
        menuSeparator
        menuSubmenu "RunningBar" "Running Bars"
        while read -r pid cmd; do
            if [[ ${cmd%% *} = polybar ]]; then
                CONF=${cmd##* }
                [[ $CONF = polybar ]] && CONF=$CONFIG
                if hash xdg-open &>/dev/null; then
                    menuItem "$CONF" "xdg-open $CONFIG"
                elif hash exo-open &>/dev/null; then
                    menuItem "$CONF" "exo-open $CONFIG"
                else
                    menuItem "$TERMINAL" -e "$EDITOR $CONFIG"
                fi
            fi
        done <<< "$(pgrep -a polybar)"
        menuSubmenuEnd
    fi
}

edit_menu() {
    menuSubmenu "EditConfigs" "Edit Configs"
        if hash manjaro-polybar-edit &>/dev/null; then
            menuItem "Edit Configs" "manjaro-polybar-edit"
        fi
        running_bars
    menuSubmenuEnd
}

launch_menu () {
    if hash manjaro-polybar-session &>/dev/null && [[ -f "$CONFIG_PATH/sessions/openbox-sessionfile" ]]; then
        if [[ $(pidof polybar) ]]; then
            menuItem "Restart Polybar" "manjaro-polybar-session"
        else
            menuItem "Start Polybar" "manjaro-polybar-session"
        fi
    fi
    if type manjaro-polyzen &>/dev/null; then
        menuItem "Polybar GUI" "manjaro-polyzen"
    fi
}

kill_menu() {
    if [[ "$(pidof polybar)" ]]; then
        menuItem "Stop Bars" "pkill polybar"
    fi
}

menuStart "Polybarmenu" "Polybar"
    launch_menu
    kill_menu
    edit_menu
menuEnd
