#!/bin/sh -x

# Get class of a wid
get_class() {
    set -x
    [ ! -z "$1" ] \
        && xprop -id "$1" -notype WM_CLASS | cut -d'"' -f2
}

get_pid() {
    set -x
    [ ! -z "$1" ] \
        && xprop -id "$1" -notype _NET_WM_PID | cut -d'=' -f2
}

get_parentpid() {
    ps -o "ppid=" -f -p $1
}

get_command() {
    ps -o comm= -p $1
}


swallow() {
    set -x
    addedtodesktop=$2
    lasttermdesktop=$(bspc query -D -n last)

    swallowerid=$1
    swallowingid=$(bspc query -N -n last)

    if [ "$addedtodesktop" == "$lasttermdesktop" ]; then
            grep "^$(get_class "$swallowerid")$" ~/.config/bspwm/swallow || return
            grep "^$(get_class "$swallowingid")$" ~/.config/bspwm/terminals || return
            echo "$swallowerid $swallowingid" >> /tmp/swallowids
            bspc node "$swallowingid" --flag hidden=on
    fi
}

spit() {
        spitterid=$1
        spitterdesktop=$2

        grep "^$spitterid" /tmp/swallowids \
            || return

        spittingid=$(grep "^$spitterid" /tmp/swallowids | head -n1 | awk '{ print $2 }')

        bspc node "$spittingid" --flag hidden=off

        termdesktop=$(bspc query -D -n "$spittingid")

        [ "$termdesktop" == "$spitterdesktop" ] \
            || bspc node "$spittingid" -d "$spitterdesktop"

        bspc node "$spittingid" -f

        sed -i "/^$spitterid/d" /tmp/swallowids
}

bspc subscribe node_add node_remove | while read -r event
do
        case $(echo "$event" | awk '{ print $1 }') in
                node_add)
                        swallow $(echo "$event" | awk '{ print $5 " " $3}')
                        ;;
                node_remove)
                        spit $(echo "$event" | awk '{ print $4 " " $3}')
                        ;;
        esac
done
