#!/usr/bin/env bash

set -eu
set -o pipefail

[ $# -eq 0 ] && {
  echo "No bar specified" ; exit 1
}

command -v lemonbar >/dev/null || {
  echo "Lemonbar is not installed" ; exit 1
}

lemonbuddy="${LEMONBUDDY_EXECUTABLE:-lemonbuddy}"

command -v "$lemonbuddy" >/dev/null || {
  echo "Lemonbuddy is not installed" ; exit 1
}

lemonbar="$($lemonbuddy "$@" -x)"
wmname="$($lemonbuddy "$@" -w)"
logfile="${XDG_CACHE_HOME:-$HOME/.cache}/lemonbuddy/${wmname}.log"
logdir="$(dirname "$logfile")"
pipe="$(mktemp -u /tmp/lemonbuddy.in.XXXXX)"

[ -d "$logdir" ] || mkdir -p "$logdir"

exec 2> >(tee "$logfile")

mkfifo "$pipe"

cleanup_proc() {
  pid=$1
  kill -0 "$pid" 2>/dev/null && {
    echo "$pid is running (sending term signal)..."
    kill -TERM "$pid" 2>/dev/null
  }
}

# shellcheck disable=SC2094
{ $lemonbuddy "$@" -p "$pipe"; kill -TERM $$ 2>/dev/null; } | $lemonbar >"$pipe" &

trap 'cleanup_proc $!' TERM INT

while kill -0 $! 2>/dev/null; do
  sleep 0.5s
done

[ -e "$pipe" ] && rm "$pipe"

kill 0; wait