#!/usr/bin/env bash
set -euo pipefail

wallpaper="${1:-}"
case "$wallpaper" in
  /usr/share/backgrounds/brz-healthos/managed-wallpaper.*) ;;
  *) printf '%s\n' "Refusing wallpaper outside the managed directory." >&2; exit 2 ;;
esac
test -f "$wallpaper"
uri="file://$wallpaper"

install -d -m 0755 /etc/dconf/db/local.d
tmp="$(mktemp /etc/dconf/db/local.d/.21-brz-managed-wallpaper.XXXXXX)"
trap 'rm -f "$tmp"' EXIT
printf '%s\n' \
  '[org/gnome/desktop/background]' \
  "picture-uri='$uri'" \
  "picture-uri-dark='$uri'" \
  "picture-options='zoom'" \
  '' \
  '[org/gnome/desktop/screensaver]' \
  "picture-uri='$uri'" >"$tmp"
chmod 0644 "$tmp"
mv "$tmp" /etc/dconf/db/local.d/21-brz-managed-wallpaper
trap - EXIT
dconf update

while read -r session _; do
  test -n "${session:-}" || continue
  active="$(loginctl show-session "$session" -p Active --value 2>/dev/null || true)"
  type="$(loginctl show-session "$session" -p Type --value 2>/dev/null || true)"
  user="$(loginctl show-session "$session" -p Name --value 2>/dev/null || true)"
  test "$active" = true || continue
  case "$type" in wayland|x11) ;; *) continue ;; esac
  uid="$(id -u "$user")"
  runtime="/run/user/$uid"
  test -S "$runtime/bus" || continue
  for key in picture-uri picture-uri-dark; do
    runuser -u "$user" -- env XDG_RUNTIME_DIR="$runtime" DBUS_SESSION_BUS_ADDRESS="unix:path=$runtime/bus" \
      gsettings set org.gnome.desktop.background "$key" "'$uri'" || true
  done
  runuser -u "$user" -- env XDG_RUNTIME_DIR="$runtime" DBUS_SESSION_BUS_ADDRESS="unix:path=$runtime/bus" \
    gsettings set org.gnome.desktop.screensaver picture-uri "'$uri'" || true
done < <(loginctl list-sessions --no-legend 2>/dev/null || true)

printf '%s\n' "Managed wallpaper applied: $wallpaper"
