#!/bin/bash

# omarchy:summary=Cycle to the next background for the current theme
# omarchy:examples=omarchy theme bg next

THEME_NAME=$(cat "$HOME/.local/state/omarchy/current/theme.name" 2>/dev/null)
THEME_BACKGROUNDS_PATH="$HOME/.local/state/omarchy/current/theme/backgrounds/"
USER_BACKGROUNDS_PATH="$HOME/.config/omarchy/backgrounds/$THEME_NAME/"
CURRENT_BACKGROUND_LINK="$HOME/.local/state/omarchy/current/background"

mapfile -d '' -t BACKGROUNDS < <(
  find -L "$USER_BACKGROUNDS_PATH" "$THEME_BACKGROUNDS_PATH" -maxdepth 1 -type f \
    \( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' -o -iname '*.gif' -o -iname '*.bmp' -o -iname '*.webp' \) \
    -print0 2>/dev/null | sort -z
)
TOTAL=${#BACKGROUNDS[@]}

if (( TOTAL == 0 )); then
  omarchy-notification-send "No background was found for theme" -t 2000
else
  # Get current background from symlink
  if [[ -L $CURRENT_BACKGROUND_LINK ]]; then
    CURRENT_BACKGROUND=$(readlink "$CURRENT_BACKGROUND_LINK")
  else
    # Default to first background if no symlink exists
    CURRENT_BACKGROUND=""
  fi

  # Find current background index
  INDEX=-1
  for i in "${!BACKGROUNDS[@]}"; do
    if [[ ${BACKGROUNDS[$i]} == "$CURRENT_BACKGROUND" ]]; then
      INDEX=$i
      break
    fi
  done

  # Get next background (wrap around)
  if (( INDEX == -1 )); then
    # Use the first background when no match was found
    NEW_BACKGROUND="${BACKGROUNDS[0]}"
  else
    NEXT_INDEX=$(((INDEX + 1) % TOTAL))
    NEW_BACKGROUND="${BACKGROUNDS[$NEXT_INDEX]}"
  fi

  omarchy-theme-bg-set "$NEW_BACKGROUND"
fi
