local M = {}

local whichkey = require("which-key")
vim.notify = require("notify")

---Helper function to add mappings to which-key
---@parm mappings table : List of mappings to add to which-key
---@parm group table : Group to add mappings to (optional)
---@return nil
---@usage addToWhichKey(mappings, group)
---@example addToWhichKey({{key = "n", cmd = "next", mode = "n", desc = "Next Line", group = "Navigation"}, {key = "t", group = "example"})
function M.addToWhichKey(mappings, group)
	local wk_mappings = {}
	if group then
		whichkey.add({ group.key, group = group.group })
	end
	if not mappings and not group then
		vim.notify("Error: Mappings is nil", "error")
		return
	elseif not mappings and group then
		return
	end
	for _, mapping in ipairs(mappings) do
		if not mapping.key or mapping.key == "" then
			vim.notify("Error: Key is empty or nil", "error")
			return
		end

		if not mapping.cmd or mapping.cmd == "" then
			vim.notify("Error: Command is empty or nil for key: " .. mapping.key, "error")
			return
		end

		if not mapping.mode or mapping.mode == "" then
			vim.notify("Error: Mode is empty or nil for key: " .. mapping.key, "error")
			return
		end

		wk_mappings[1] = mapping.key
		wk_mappings[2] = mapping.cmd
		wk_mappings.mode = mapping.mode
		wk_mappings.desc = mapping.desc or "No Description"
		wk_mappings.group = mapping.group or "No Group"
		whichkey.add(wk_mappings)
	end
end

return M