#!/bin/bash

WINDOW_ID_CONKY=/tmp/conky_window_id

conky_launch() {
    # Hacky X11 magic to make Conky appear above polybar
    killall conky
    # xdotool search can't find Conky's window but fortunately Conky outputs it
    conky -c ~/.config/conky/config 2> /tmp/conky_out
    # Extract the hex window id from Conky's output
    HEX=$(awk '/drawing to created window/ {print $NF}' /tmp/conky_out | tr -d '()' | awk -Fx '{print $2}')
    WIN_ID=$(( 16#$HEX )) # convert to decimal
    xdotool windowunmap $WIN_ID
    echo $WIN_ID > $WINDOW_ID_CONKY
}

launch() {
    killall polybar
    conky_launch
    sleep 0.2
    polybar top &
    BAR_ID=$!
    rm -f /tmp/polybar_mqueue_top
    ln -s /tmp/polybar_mqueue.$BAR_ID /tmp/polybar_mqueue_top
}

dmenu_open() {
  j4-dmenu-desktop --dmenu="dmenu -fn 'Iosevka-11' -nb '#282828' -nf '#ebdbb2' -sb '#d79921' -w '800' -x '300' -y '220' -p 'Apps' -i -l 10"
}

drun_open() {
  dmenu_run -fn "Iosevka-11" -nb "#282828" -nf "#ebdbb2" -sb "#d79921" -w "800" -x "300" -y "220" -p "Run" -i -l 10
}

search_open() {
    ~/.config/scripts/dswitcher
}

options_open() {
    ~/.config/scripts/rofi_option_menu &
    ROFI_PID=$!

    sleep 0.05

    # Show music player and panel
    echo "hook:module/option_menu2" >> /tmp/polybar_mqueue_top
    ID_CONKY=$(cat $WINDOW_ID_CONKY)
    xdotool windowmap $ID_CONKY
    xdotool windowraise $ID_CONKY
    ~/.config/scripts/music_player show_applet

    wait $ROFI_PID

    # Close music player and panel
    xdotool windowunmap $ID_CONKY
    ~/.config/scripts/music_player hide_applet
    echo "hook:module/option_menu1" >> /tmp/polybar_mqueue_top
}

options_icon() {
    COLOR_NORMAL="%{F$(xrdb -query | awk '/^*foreground/ {print $2}')}"
    COLOR_ACTIVE="%{F$(xrdb -query | awk '/^*primary/ {print $2}')}"
    COLOR_END="%{F-}"

    case "$1" in
        "open")   echo "$COLOR_ACTIVE$COLOR_END";;
        "closed") echo "$COLOR_NORMAL$COLOR_END";;
        *)        echo "ERROR";;
    esac
}

case "$1" in
    dmenu)
        dmenu_open;;
    drun)
        drun_open;;
    search)
        search_open;;
    options)
        options_open;;
    options_icon)
        options_icon "$2";;
    launch)
        launch;;
    hide)
        echo "cmd:hide" >> /tmp/polybar_mqueue_top;;
    show)
        echo "cmd:show" >> /tmp/polybar_mqueue_top;;
esac
