#!/usr/bin/env nu
let wallpaper_dir = $"($env.HOME)/wallpapers"
try { mkdir $wallpaper_dir }

let wallpapers = (
   try {
      ls $wallpaper_dir
      | where type == file
      | where name =~ '\.(jpg|png|jpeg|webp|gif)$'
   } catch {
      print --stderr "Failed to list wallpapers"
      exit 1
   }
)
if ($wallpapers | is-empty) {
   print --stderr $"No wallpapers found in ($wallpaper_dir)"
   exit 1
}
let selected = $wallpapers
   | get name
   | str join "\n"
   | (fzf
      --preview
      "chafa --size 40x20 {}"
      --preview-window=right:50%
      --prompt="Select wallpaper: ")

if ($selected | is-not-empty) {
   swww img $selected | ignore # nu-lint-ignore: redundant_ignore

   print $"Wallpaper set: \(($selected | path basename)\)"

   let theme_config = try {
      open $"($env.HOME)/nixos/modules/theme.json"
   } catch {
      {mode: light, scheme: gruvbox}
   }
   if $theme_config.scheme == pywal {
      print "Regenerating pywal colors..."

      try {
         rm --recursive --force ~/.cache/wal

         let base_args = ["-n" "--backend" wal "-i" $selected]

         let mode_args = if $theme_config.mode == dark {
            ["--saturate" "0.5"]
         } else {
            ["--saturate" "0.75" "-l"]
         }

         wal ...($base_args | append $mode_args) | ignore # nu-lint-ignore: redundant_ignore

         cp ~/.cache/wal/colors.json $"($env.HOME)/nixos/modules/theme-pywal-colors.json"

         print "Colors regenerated!"

         try { /home/jam/nixos/rebuild.nu } catch { exit 1 }
         print "Rebuilt system to apply colors."
      } catch {|e| print $"Warning: Failed to regenerate colors: ($e.msg)" }
   }
}