{
  config,
  lib,
  pkgs,
  namespace,
  ...
}:
let
  cfg = config.${namespace}.desktop.hyprland;

  # The script to use based on the selected wallpaper source
  wallpaper-command = if cfg.wallpaperSource == "nasa" then "nasa-wallpaper" else "bing-wallpaper";

  # System activation script to ensure wallpaper is available early in boot
  wallpaper-activation-script = ''
    # Create wallpaper directory if it doesn't exist
    mkdir -p ${cfg.wallpaperDir}

    # Copy default wallpaper as fallback if it doesn't exist
    if [ ! -f ${cfg.wallpaperDir}/fallback.jpg ]; then
      cp ${cfg.defaultWallpaper} ${cfg.wallpaperDir}/fallback.jpg
    fi

    # If no current wallpaper exists, use the fallback
    if [ ! -f ${cfg.wallpaperDir}/current.jpg ]; then
      cp ${cfg.wallpaperDir}/fallback.jpg ${cfg.wallpaperDir}/current.jpg
    fi

    # Create symlink for Plymouth and SDDM
    ln -sf ${cfg.wallpaperDir}/current.jpg /run/wallpaper.jpg
  '';

  bing-wallpaper = pkgs.writeScriptBin "bing-wallpaper" ''
    # Directory to store wallpapers
    WALLPAPER_DIR="${cfg.wallpaperDir}"
    IMG_PATH="$WALLPAPER_DIR/current.jpg"
    FALLBACK_PATH="$WALLPAPER_DIR/fallback.jpg"

    # Ensure directory exists
    mkdir -p "$WALLPAPER_DIR"

    # Copy to the standard location for other services
    ln -sf "$IMG_PATH" /run/wallpaper.jpg

    # Try to download new wallpaper
    if ${lib.getExe pkgs.curl} -s --connect-timeout 5 --max-time 10 "https://www.bing.com" > /dev/null; then
      URL=$(${lib.getExe pkgs.curl} -s "https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1" | \
        ${lib.getExe pkgs.jq} -r '.images[0].url')
      FULL_URL="https://www.bing.com$URL"
      if ${lib.getExe pkgs.curl} -s -o "$IMG_PATH.tmp" "$FULL_URL"; then
        mv "$IMG_PATH.tmp" "$IMG_PATH"
        echo "Downloaded $FULL_URL to $IMG_PATH successfully"
      else
        echo "Failed to download Bing wallpaper, using previous or fallback"
        # If current doesn't exist, use fallback
        if [ ! -f "$IMG_PATH" ] && [ -f "$FALLBACK_PATH" ]; then
          cp "$FALLBACK_PATH" "$IMG_PATH"
        fi
      fi
    else
      echo "Network unavailable, using previous or fallback wallpaper"
      # If current doesn't exist, use fallback
      if [ ! -f "$IMG_PATH" ] && [ -f "$FALLBACK_PATH" ]; then
        cp "$FALLBACK_PATH" "$IMG_PATH"
      fi
    fi
  '';

  nasa-wallpaper = pkgs.writeScriptBin "nasa-wallpaper" ''
    # Directory to store wallpapers
    WALLPAPER_DIR="${cfg.wallpaperDir}"
    IMG_PATH="$WALLPAPER_DIR/current.jpg"
    FALLBACK_PATH="$WALLPAPER_DIR/fallback.jpg"

    # Ensure directory exists
    mkdir -p "$WALLPAPER_DIR"

    # Copy to the standard location for other services
    ln -sf "$IMG_PATH" /run/wallpaper.jpg

    # Try to download new wallpaper
    if ${lib.getExe pkgs.curl} -s --connect-timeout 5 --max-time 10 "https://api.nasa.gov" > /dev/null; then
      APOD_URL="https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY"
      IMAGE_URL=$(${lib.getExe pkgs.curl} -s "$APOD_URL" | ${lib.getExe pkgs.jq} -r '.hdurl // .url')
      if ${lib.getExe pkgs.curl} -s -o "$IMG_PATH.tmp" "$IMAGE_URL"; then
        mv "$IMG_PATH.tmp" "$IMG_PATH"
        echo "Downloaded $IMAGE_URL to $IMG_PATH successfully"
      else
        echo "Failed to download NASA wallpaper, using previous or fallback"
        # If current doesn't exist, use fallback
        if [ ! -f "$IMG_PATH" ] && [ -f "$FALLBACK_PATH" ]; then
          cp "$FALLBACK_PATH" "$IMG_PATH"
        fi
      fi
    else
      echo "Network unavailable, using previous or fallback wallpaper"
      # If current doesn't exist, use fallback
      if [ ! -f "$IMG_PATH" ] && [ -f "$FALLBACK_PATH" ]; then
        cp "$FALLBACK_PATH" "$IMG_PATH"
      fi
    fi
  '';
in
{
  imports = [ ../options.nix ];

  config = lib.mkIf cfg.enable {
    environment.systemPackages = [
      bing-wallpaper
      nasa-wallpaper
    ];

    # Add system activation script to ensure wallpaper is available early
    system.activationScripts.wallpaper = wallpaper-activation-script;

    systemd = {
      services = {
        preload-wallpaper = {
          enable = true;
          wants = [ "network-online.target" ];
          after = [ "network-online.target" ];
          #          before = [ "display-manager.service" ];
          #          requiredBy = [
          #            "plymouth-quit-wait.service"
          #            "display-manager.service"
          #          ];
          #          wantedBy = [ "display-manager.service" ];
          path = [
            pkgs.bash
            pkgs.jq
            pkgs.curl
            bing-wallpaper
            nasa-wallpaper
          ];
          script = ''
            ${wallpaper-command}
          '';
          serviceConfig = {
            Type = "oneshot";
            TimeoutSec = "10s"; # Limit how long we wait for network
          };
        };
      };
      user = {
        services = {
          reload-wallpaper = {
            enable = true;
            path = [
              pkgs.bash
              pkgs.jq
              pkgs.curl
              pkgs.hyprland
              bing-wallpaper
              nasa-wallpaper
            ];
            script = ''
              ${wallpaper-command}
              ${lib.getExe' pkgs.hyprland "hyprctl"} hyprpaper reload ,${cfg.wallpaper}
            '';
            serviceConfig = {
              Type = "oneshot";
            };
          };
        };
        # Create a timer to run the service periodically
        timers = {
          reload-wallpaper = {
            description = "Timer for reload-wallpaper";
            wantedBy = [ "timers.target" ];

            # Timer configuration
            timerConfig = {
              OnCalendar = "daily"; # Check every day
              Persistent = true; # Run immediately if last run was missed
              Unit = "reload-wallpaper.service";
            };
          };
        };
      };
    };
  };
}
