local Util = require("lazy.core.util")
local Loader = require("lazy.core.loader")

---@class LazyCmdHandler:LazyHandler
local M = {}

function M:_load(cmd)
  vim.api.nvim_del_user_command(cmd)
  Util.track({ cmd = cmd })
  Loader.load(self.active[cmd], { cmd = cmd })
  Util.track()
end

---@param cmd string
function M:_add(cmd)
  vim.api.nvim_create_user_command(cmd, function(event)
    self:_load(cmd)
    vim.cmd(
      ("%s %s%s%s %s"):format(
        event.mods or "",
        event.line1 == event.line2 and "" or event.line1 .. "," .. event.line2,
        cmd,
        event.bang and "!" or "",
        event.args or ""
      )
    )
  end, {
    bang = true,
    range = true,
    nargs = "*",
    complete = function(_, line)
      self:_load(cmd)
      -- NOTE: return the newly loaded command completion
      return vim.fn.getcompletion(line, "cmdline")
    end,
  })
end

---@param _plugin LazyPlugin
---@param value string
function M:_del(_plugin, value)
  pcall(vim.api.nvim_del_user_command, value)
end

return M