#!/bin/bash

config_string () {
    # read config file supplied as argument
    FILE=$(grep '^wallpaper=' $1 2> /dev/null | head -1 | cut -d= -f2-)
    MODE=$(grep '^wallpaper_mode=' $1 2> /dev/null | head -1 | cut -d= -f2-)
    COLOUR=$(grep '^desktop_bg=' $1 2> /dev/null | head -1 | cut -d= -f2-)

    # get defaults for any undefined values - assumes system defaults for both monitors are identical
    if [ -z "$FILE" ] ; then FILE=$(grep '^wallpaper=' /etc/xdg/pcmanfm/default/desktop-items-0.conf | head -1 | cut -d= -f2-) ; fi
    if [ -z "$MODE" ] ; then MODE=$(grep '^wallpaper_mode=' /etc/xdg/pcmanfm/default/desktop-items-0.conf | head -1 | cut -d= -f2-) ; fi
    if [ -z "$COLOUR" ] ; then COLOUR=$(grep '^desktop_bg=' /etc/xdg/pcmanfm/default/desktop-items-0.conf | head -1 | cut -d= -f2-) ; fi

    # remap mode if needed
    case "$MODE" in
      crop)    SMODE="fill" ;;
      color)   SMODE="solid_color" ;;
      *)       SMODE="$MODE" ;;
    esac
    ARRAY+=("-m")
    ARRAY+=("$SMODE")

    # extract colour bytes
    if [ ${#COLOUR} -gt 7 ] ; then
      SCOLOUR="$(echo $COLOUR | cut --characters=2,3,6,7,10,11)"
    else
      SCOLOUR="$(echo $COLOUR | cut --characters=2,3,4,5,6,7)"
    fi
    ARRAY+=("-c")
    ARRAY+=("$SCOLOUR")
    
    if [ ! -z "$FILE" ] ; then
      ARRAY+=("-i")
      ARRAY+=("$FILE")
    fi
}

# check for shared bg - assumes system default is not common desktops
GCONF="$HOME/.config/pcmanfm/default/pcmanfm.conf"

ARRAY=()
if pgrep labwc > /dev/null && grep -q "use_swaybg=1" $GCONF 2> /dev/null; then
  if grep -q "common_bg=1" $GCONF 2> /dev/null; then
    # single config for all outputs
    config_string "$HOME/.config/pcmanfm/default/desktop-items-0.conf"
  else
    # read per monitor configs
    for MON in $(wlr-randr | grep ^[^[:blank:]] | cut -d ' ' -f 1); do
        ARRAY+=("-m")
        ARRAY+=("$MON")
        config_string "$HOME/.config/pcmanfm/default/desktop-items-$MON.conf"
    done
  fi
  swaybg "${ARRAY[@]}" 2> /dev/null
else
  env GLIBC_TUNABLES=glibc.malloc.mmap_threshold=131072:glibc.malloc.trim_threshold=131072:glibc.malloc.tcache_count=0 pcmanfm --desktop
fi
