{ pkgs, ... }:

let
  mockZshPluginSrc = pkgs.writeText "mockZshPluginSrc" "echo example";
in
{
  config = {
    programs.zsh = {
      enable = true;
      plugins = [
        {
          name = "mockPlugin";
          file = "share/mockPlugin/mockPlugin.plugin.zsh";
          src = mockZshPluginSrc;
          functions = [
            "share/zsh/site-functions"
            "share/zsh/vendor-completions"
          ];
        }
      ];
    };

    test.stubs.zsh = { };

    nmt.script = ''
      # Test the plugin directories loop structure
      assertFileContains home-files/.zshrc '# Add plugin directories to PATH and fpath'
      assertFileContains home-files/.zshrc 'plugin_dirs=('
      assertFileContains home-files/.zshrc 'mockPlugin'
      assertFileContains home-files/.zshrc 'for plugin_dir in "''${plugin_dirs[@]}"; do'
      assertFileContains home-files/.zshrc 'path+="/home/hm-user/.zsh/plugins/$plugin_dir"'
      assertFileContains home-files/.zshrc 'fpath+="/home/hm-user/.zsh/plugins/$plugin_dir"'
      assertFileContains home-files/.zshrc '$plugin_dir/share/zsh/plugins/$plugin_dir'
      assertFileContains home-files/.zshrc '$plugin_dir/share/zsh/site-functions'
      assertFileContains home-files/.zshrc '$plugin_dir/share/zsh/vendor-completions'

      # Test the completion paths loop structure
      assertFileContains home-files/.zshrc '# Add additional function paths to fpath'
      assertFileContains home-files/.zshrc 'function_paths=('
      assertFileContains home-files/.zshrc 'mockPlugin/share/zsh/site-functions'
      assertFileContains home-files/.zshrc 'mockPlugin/share/zsh/vendor-completions'
      assertFileContains home-files/.zshrc 'for function_path in "''${function_paths[@]}"; do'
      assertFileContains home-files/.zshrc 'fpath+="/home/hm-user/.zsh/plugins/$function_path"'

      # Test the plugin loading structure
      assertFileContains home-files/.zshrc '# Source plugins'
      assertFileContains home-files/.zshrc 'plugins=('
      assertFileContains home-files/.zshrc 'mockPlugin/share/mockPlugin/mockPlugin.plugin.zsh'
      assertFileContains home-files/.zshrc 'for plugin in "''${plugins[@]}"; do'
      assertFileContains home-files/.zshrc '[[ -f "/home/hm-user/.zsh/plugins/$plugin" ]] && source "/home/hm-user/.zsh/plugins/$plugin"'
    '';
  };
}
