{ config, pkgs, lib, ... }:

let
  nomarchyLib = import ../../lib { inherit lib; };
  themeList = builtins.concatStringsSep "\\n" nomarchyLib.themeNames;

  nomarchy-theme-selector = pkgs.writeShellScriptBin "nomarchy-theme-selector" ''
    SELECTED_THEME=$(echo -e "${themeList}" | walker --dmenu)

    if [ -n "$SELECTED_THEME" ]; then
      nomarchy-theme-set "$SELECTED_THEME"
    fi
  '';

  nomarchy-font-selector = pkgs.writeShellScriptBin "nomarchy-font-selector" ''
    STATE_DIR="${config.home.homeDirectory}/.config/nomarchy"
    STATE_FILE="$STATE_DIR/state.json"

    mkdir -p "$STATE_DIR"
    [[ ! -f $STATE_FILE ]] && echo "{}" > "$STATE_FILE"

    # Simple list of common nerd fonts, could be expanded
    FONTS="JetBrainsMono Nerd Font\nRobotoMono Nerd Font\nFiraCode Nerd Font\nUbuntuMono Nerd Font"
    SELECTED_FONT=$(echo -e "$FONTS" | walker --dmenu)

    if [ -n "$SELECTED_FONT" ]; then
      TMP_JSON=$(mktemp)
      jq --arg font "$SELECTED_FONT" '.font = $font' "$STATE_FILE" > "$TMP_JSON" && mv "$TMP_JSON" "$STATE_FILE"
      nomarchy-env-update
    fi
  '';

  nomarchy-wallpaper-selector = pkgs.writeShellScriptBin "nomarchy-wallpaper-selector" ''
    STATE_DIR="${config.home.homeDirectory}/.config/nomarchy"
    STATE_FILE="$STATE_DIR/state.json"
    THEMES_DIR="${config.xdg.dataHome}/nomarchy/themes"

    mkdir -p "$STATE_DIR"
    [[ ! -f $STATE_FILE ]] && echo "{}" > "$STATE_FILE"

    # List all images in all themes backgrounds
    # We search in the system-wide flake source for distro wallpapers to avoid Nix Store bloat
    WALLPAPERS=$(find "${config.xdg.dataHome}/nomarchy/themes" -type f \( -name "*.jpg" -o -name "*.png" \) 2>/dev/null)
    DISTRO_THEMES="/etc/nixos/nomarchy/assets/themes"
    if [ -d "$DISTRO_THEMES" ]; then
        WALLPAPERS="$WALLPAPERS\n$(find "$DISTRO_THEMES" -type f \( -name "*.jpg" -o -name "*.png" \))"
    fi
    # Include user themes if they exist
    if [ -d "${config.home.homeDirectory}/.config/nomarchy/themes" ]; then
        WALLPAPERS="$WALLPAPERS\n$(find "${config.home.homeDirectory}/.config/nomarchy/themes" -type f \( -name "*.jpg" -o -name "*.png" \))"
    fi
    SELECTED_WP=$(echo -e "$WALLPAPERS" | walker --dmenu)

    if [ -n "$SELECTED_WP" ]; then
      TMP_JSON=$(mktemp)
      jq --arg wp "$SELECTED_WP" '.wallpaper = $wp' "$STATE_FILE" > "$TMP_JSON" && mv "$TMP_JSON" "$STATE_FILE"
      swww img "$SELECTED_WP" --transition-type outer --transition-pos 0.85,0.97 --transition-step 90 &
      nomarchy-env-update
    fi
  '';
in
{
  home.packages = [ nomarchy-theme-selector nomarchy-font-selector nomarchy-wallpaper-selector ];
}
