---@module "data.deps"
--- This module aggregates various dependencies used throughout the configuration.
--- It provides a centralized way to access dependencies.
--          ╭─────────────────────────────────────────────────────────╮
--          │                      DEPENDENCIES                       │
--          ╰─────────────────────────────────────────────────────────╯
local M = {}

M.avante = {
  "stevearc/dressing.nvim",
  "nvim-lua/plenary.nvim",
  "MunifTanjim/nui.nvim",
}

M.chatgpt = {
  "MunifTanjim/nui.nvim",
  "nvim-lua/plenary.nvim",
  "folke/trouble.nvim",
  "nvim-telescope/telescope.nvim",
}

--- nvim-cmp dependencies
---@return table The nvim-cmp dependencies
M.cmp = {
  {
    "L3MON4D3/LuaSnip",
    --- Function to build the dependencies
    ---@return string|nil The command to build the dependencies
    build = (function()
      if vim.fn.has("win32") == 1 or vim.fn.executable("make") == 0 then
        return
      end
      return "make install_jsregexp"
    end)(),
    dependencies = {
      {
        "rafamadriz/friendly-snippets",
        config = function()
          require("luasnip.loaders.from_vscode").lazy_load()
        end,
      },
    },
  },
  {
    "petertriho/cmp-git",
    opts = {},
    --- Function to configure the cmp-git dependency
    ---@return table|nil The cmp-git config
    config = function()
      local cmp = require("cmp")
      cmp.setup.filetype("gitcommit", {
        sources = cmp.config.sources({
          { name = "git", priority = 50 },
          { name = "path", priority = 40 },
        }, {
          { name = "buffer", priority = 50 },
        }),
      })
    end,
  },
  "saadparwaiz1/cmp_luasnip",
  "hrsh7th/cmp-nvim-lsp",
  "hrsh7th/cmp-path",
  "hrsh7th/cmp-buffer",
  "onsails/lspkind.nvim",
  -- "hrsh7th/cmp-emoji",
  "hrsh7th/cmp-cmdline",
  "dmitmel/cmp-cmdline-history",
  "teramako/cmp-cmdline-prompt.nvim",
  "mtoohey31/cmp-fish",
  "vim-dadbod-completion",
  {
    "chrisgrieser/cmp_yanky",
    option = {
      onlyCurrentFiletype = false,
    },
  },
  "SergioRibera/cmp-dotenv",
  "hrsh7th/cmp-calc",
  "davidsierradz/cmp-conventionalcommits",
  -- "Dynge/gitmoji.nvim",
}

--- Gx plugin dependencies
M.gx = {
  "nvim-lua/plenary.nvim",
}

--- Hardtime plugin dependencies
M.hardtime = {
  "MunifTanjim/nui.nvim",
  "nvim-lua/plenary.nvim",
}

--- LazyGit plugin dependencies
M.lazygit = {
  "nvim-telescope/telescope.nvim",
  "nvim-lua/plenary.nvim",
}

--- Lualine plugin dependencies
M.lualine = {
  { "bezhermoso/todos-lualine.nvim" },
  { "folke/todo-comments.nvim" },
}

--- Minuet plugin dependencies
M.minuet = {
  { "nvim-lua/plenary.nvim" },
}

--- MusicControls plugin dependencies
M.musiccontrols = {
  "rcarriga/nvim-notify",
}

--- Table for plugins that need Telescope as a dependency
M.needs_telescope = {
  "nvim-telescope/telescope.nvim",
}

--- Table for plugins that need Treesitter as a dependency
M.needs_treesitter = {
  "nvim-treesitter/nvim-treesitter",
}

--- Neotest plugin adapters and dependencies
M.neotest = {
  adapters = {
    "neotest-plenary",
    "neotest-python",
    "neotest-vim-test",
    "neotest-minitest",
    "neotest-bash",
  },
  deps = {
    "nvim-neotest/nvim-nio",
    "nvim-lua/plenary.nvim",
    "zidhuss/neotest-minitest",
    "rcasia/neotest-bash",
    "antoinemadec/FixCursorHold.nvim",
    "nvim-treesitter/nvim-treesitter",
  },
}

--- Recorder plugin dependencies
M.recorder = {
  "rcarriga/nvim-notify",
}

--- nvim-remote plugin dependencies
M.remotenvim = {
  "nvim-lua/plenary.nvim", -- For standard functions
  "MunifTanjim/nui.nvim", -- To build the plugin UI
  "nvim-telescope/telescope.nvim", -- For picking b/w different remote methods
}

--- Zenbones plugin dependencies
M.zenbones = {
  "rktjmp/lush.nvim",
}

return M
