{ config, lib, ... }:

# Behavior Configuration Module
#
# This module deploys non-visual configuration files (keybindings, input settings,
# window rules, etc.) with lib.mkDefault, allowing downstream users to override.
#
# Visual/theme configs are handled separately by theme-loader.nix and stylix.nix.
#
# Behavior configs include:
# - Keybindings (bindings, media keys, clipboard)
# - Input settings (keyboard, mouse, touchpad)
# - Window rules and layouts
# - Autostart applications
# - Environment variables

let
  configDir = ./config;
  overridesDir = "${config.home.homeDirectory}/.config/nomarchy/overrides";

  # Behavior config categories with their source paths
  behaviorConfigs = {
    # Hyprland behavior (non-visual)
    "nomarchy/default/hypr/bindings.conf" = "hypr/bindings.conf";
    "nomarchy/default/hypr/bindings/media.conf" = "hypr/bindings/media.conf";
    "nomarchy/default/hypr/bindings/clipboard.conf" = "hypr/bindings/clipboard.conf";
    "nomarchy/default/hypr/bindings/tiling-v2.conf" = "hypr/bindings/tiling-v2.conf";
    "nomarchy/default/hypr/bindings/utilities.conf" = "hypr/bindings/utilities.conf";
    "nomarchy/default/hypr/input.conf" = "hypr/input.conf";
    "nomarchy/default/hypr/windows.conf" = "hypr/windows.conf";
    "nomarchy/default/hypr/autostart.conf" = "hypr/autostart.conf";
    "nomarchy/default/hypr/envs.conf" = "hypr/envs.conf";
    "nomarchy/default/hypr/looknfeel.conf" = "hypr/looknfeel.conf";

    # App-specific window rules (behavior, not visual)
    "nomarchy/default/hypr/apps.conf" = "hypr/apps.conf";
    "nomarchy/default/hypr/apps/qemu.conf" = "hypr/apps/qemu.conf";
    "nomarchy/default/hypr/apps/steam.conf" = "hypr/apps/steam.conf";
    "nomarchy/default/hypr/apps/terminals.conf" = "hypr/apps/terminals.conf";
    "nomarchy/default/hypr/apps/walker.conf" = "hypr/apps/walker.conf";
    "nomarchy/default/hypr/apps/browser.conf" = "hypr/apps/browser.conf";
    "nomarchy/default/hypr/apps/1password.conf" = "hypr/apps/1password.conf";
    "nomarchy/default/hypr/apps/bitwarden.conf" = "hypr/apps/bitwarden.conf";
    "nomarchy/default/hypr/apps/pip.conf" = "hypr/apps/pip.conf";
    "nomarchy/default/hypr/apps/system.conf" = "hypr/apps/system.conf";
    "nomarchy/default/hypr/apps/localsend.conf" = "hypr/apps/localsend.conf";
    "nomarchy/default/hypr/apps/telegram.conf" = "hypr/apps/telegram.conf";
    "nomarchy/default/hypr/apps/geforce.conf" = "hypr/apps/geforce.conf";
    "nomarchy/default/hypr/apps/moonlight.conf" = "hypr/apps/moonlight.conf";
    "nomarchy/default/hypr/apps/retroarch.conf" = "hypr/apps/retroarch.conf";
    "nomarchy/default/hypr/apps/webcam-overlay.conf" = "hypr/apps/webcam-overlay.conf";
    "nomarchy/default/hypr/apps/davinci-resolve.conf" = "hypr/apps/davinci-resolve.conf";
    "nomarchy/default/hypr/apps/hyprshot.conf" = "hypr/apps/hyprshot.conf";
  };

in
{
  options.nomarchy.behavior = {
    hyprland = {
      bindings = lib.mkOption {
        type = lib.types.bool;
        default = true;
        description = "Whether to deploy default Hyprland keybindings.";
      };
      input = lib.mkOption {
        type = lib.types.bool;
        default = true;
        description = "Whether to deploy default input settings.";
      };
      windowRules = lib.mkOption {
        type = lib.types.bool;
        default = true;
        description = "Whether to deploy default window rules.";
      };
      autostart = lib.mkOption {
        type = lib.types.bool;
        default = true;
        description = "Whether to deploy default autostart configuration.";
      };
    };
  };

  config = {
    # Note: The actual config deployment is handled by configs.nix
    # This module provides the options and documentation for behavior configs
    # The separation allows users to selectively disable behavior categories

    # Ensure behavior config directories exist in overrides
    home.activation.createBehaviorOverrideDirs = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
      mkdir -p "${overridesDir}/hypr/bindings"
      mkdir -p "${overridesDir}/hypr/apps"
    '';
  };
}
