{ config, lib, ... }:

let
  nomarchyLib = import ../../lib { inherit lib; };
  themePath = ../palettes + "/${config.nomarchy.theme}";
  themeAppsPath = themePath + "/apps";
  nordAppsPath = ../../features/desktop/hyprland/themes/nord;
  hyprlandThemePath = ../../features/desktop/hyprland/themes + "/${config.nomarchy.theme}";

  # Check if theme has hyprland.conf in palette apps/ or feature themes/
  hasHyprlandConf = builtins.pathExists (themeAppsPath + "/hyprland.conf");
  hasHyprlandFeatureConf = builtins.pathExists (hyprlandThemePath + "/hyprland.conf");

  hyprlandConfSource =
    if hasHyprlandConf then themeAppsPath + "/hyprland.conf"
    else if hasHyprlandFeatureConf then hyprlandThemePath + "/hyprland.conf"
    else nordAppsPath + "/hyprland.conf";

  # Get palette for dynamic CSS generation
  palette = nomarchyLib.getPalette config.nomarchy.theme;
in
{
  xdg.configFile."nomarchy/current/theme" = {
    source = themePath;
    recursive = true;
  };

  # Generate waybar.css if it doesn't exist in the theme
  # This provides the @background and @foreground variables used by the default style
  xdg.configFile."nomarchy/current/theme/waybar.css".text = ''
    @define-color background #${palette.base00};
    @define-color foreground #${palette.base05};
    @define-color accent #${palette.base0D};
  '';

  # Ensure theme-specific hyprland config exists
  # Lookup priority: palette apps/ > feature themes/ > nord fallback
  xdg.configFile."nomarchy/current/theme/apps/hyprland.conf" = lib.mkIf (!hasHyprlandConf) {
    source = if hasHyprlandFeatureConf then hyprlandThemePath + "/hyprland.conf"
             else nordAppsPath + "/hyprland.conf";
  };

  # Legacy compatibility: symlink apps/hyprland.conf to root for scripts expecting old path
  xdg.configFile."nomarchy/current/theme/hyprland.conf" = {
    source = hyprlandConfSource;
  };
  
  # Rofi fallback support
  xdg.configFile."rofi/config.rasi" = lib.mkIf (builtins.pathExists (themeAppsPath + "/rofi.rasi")) {
    source = themeAppsPath + "/rofi.rasi";
  };
  
  # Walker fallback support
  xdg.configFile."nomarchy/current/theme/apps/walker/style.css" = lib.mkIf (!builtins.pathExists (themeAppsPath + "/walker/style.css")) {
    text = ''
      * {
        color: #${palette.base05};
      }
      #window {
        background-color: #${palette.base00};
      }
      .item.active {
        background-color: #${palette.base03};
        color: #${palette.base0B};
      }
    '';
  };
  
  xdg.configFile."nomarchy/current/theme.name".text = config.nomarchy.theme;

  # Expose branding assets
  xdg.configFile."nomarchy/branding/logo.png".source = ../../core/branding/logo.png;
  xdg.configFile."nomarchy/branding/logo.txt".source = ../../core/branding/logo.txt;
  xdg.configFile."nomarchy/branding/logo.svg".source = ../../core/branding/logo.svg;
  xdg.configFile."nomarchy/branding/icon.png".source = ../../core/branding/icon.png;
  xdg.configFile."nomarchy/branding/icon.txt".source = ../../core/branding/icon.txt;

  # Expose all themes to the system via local share for script accessibility
  # We filter out images to prevent Nix Store bloat
  xdg.dataFile."nomarchy/themes".source = builtins.path {
    name = "nomarchy-themes-no-images";
    path = ../palettes;
    filter = path: type: 
      let 
        baseName = baseNameOf path;
      in
        ! (type == "regular" && (
          lib.hasSuffix ".jpg" baseName || 
          lib.hasSuffix ".png" baseName || 
          lib.hasSuffix ".jpeg" baseName
        ));
  };

  # Nautilus python extensions
  xdg.dataFile."nautilus-python/extensions/localsend.py".source = ../../core/home/config/nautilus-python/extensions/localsend.py;
}
