#! /bin/sh
#
# Example panel for dzen2

font_family='sans-serif'
font_size=11

. panel_colors

screen_width=$(sres -W)
NORMIFS=$IFS
FIELDIFS=':'
PADDING='  '

while getopts 'f:s:' opt ; do
	case "$opt" in
		f)
			font_family=$OPTARG
			;;
		s)
			font_size=$OPTARG
			;;
	esac
done

shift $((OPTIND - 1))

while read -r line ; do
	case $line in
		S*)
			# clock output
			sys_infos="^fg($COLOR_STATUS_FG)^bg($COLOR_STATUS_BG)${PADDING}${line#?}${PADDING}^fg()^bg()${PADDING}"
			;;
		T*)
			# xtitle output
			title="^fg($COLOR_TITLE_FG)^bg($COLOR_TITLE_BG)${PADDING}${line#?}${PADDING}^fg()^bg()"
			;;
		W*)
			# bspwm internal state
			wm_infos="$PADDING"
			IFS=$FIELDIFS
			set -- ${line#?}
			while [ $# -gt 0 ] ; do
				item=$1
				case $item in
					[OoFfUu]*)
						# desktops
						name=${item#?}
						case $item in
							O*)
								# focused occupied desktop
								FG=$COLOR_FOCUSED_OCCUPIED_FG
								BG=$COLOR_FOCUSED_OCCUPIED_BG
								;;
							F*)
								# focused free desktop
								FG=$COLOR_FOCUSED_FREE_FG
								BG=$COLOR_FOCUSED_FREE_BG
								;;
							U*)
								# focused urgent desktop
								FG=$COLOR_FOCUSED_URGENT_FG
								BG=$COLOR_FOCUSED_URGENT_BG
								;;
							o*)
								# occupied desktop
								FG=$COLOR_OCCUPIED_FG
								BG=$COLOR_OCCUPIED_BG
								;;
							f*)
								# free desktop
								FG=$COLOR_FREE_FG
								BG=$COLOR_FREE_BG
								;;
							u*)
								# urgent desktop
								FG=$COLOR_URGENT_FG
								BG=$COLOR_URGENT_BG
								;;
						esac
						wm_infos="${wm_infos}^fg(${FG})^bg(${BG})^ca(1, bspc desktop -f ${name})^ca(2, bspc window -d ${name})${PADDING}${name}${PADDING}^ca()^ca()"
						;;
					L*)
						# layout
						layout=$(printf "%s" "${item#?}" | sed 's/^\(.\).*/\U\1/')
						wm_infos="${wm_infos}^fg()^bg()${PADDING}${PADDING}^fg($COLOR_LAYOUT_FG)^bg($COLOR_LAYOUT_BG)^ca(1, bspc desktop -l next)${PADDING}$layout${PADDING}^ca()"
						;;
				esac
				shift
			done
			IFS=$NORMIFS
			;;
	esac
	set -- $(printf '%s\0%s\0%s' "$wm_infos" "$title" "$sys_infos" | sed 's/\^[a-z]\+([^)]*)//g' | xargs -0 txtw -f "$font_family" -s "$font_size")
	left_width=$1
	center_width=$2
	right_width=$3
	left_indent=0
	right_indent=$((screen_width - right_width))
	available_center=$((screen_width - (left_width + right_width)))
	if [ $available_center -lt $center_width ] ; then
		center_indent=$left_width
	else
		max_left_right_width=$left_width
		[ $left_width -lt $right_width ] && max_left_right_width=$right_width
		if [ $((2 * max_left_right_width + center_width)) -gt $screen_width ] ; then
			center_indent=$((left_width + (available_center - center_width) / 2))
		else
			center_indent=$(((screen_width - center_width) / 2))
		fi
	fi
	printf "%s\n" "^pa($center_indent)$title^pa($left_indent)$wm_infos^pa($right_indent)$sys_infos"
done
