local log = require("ltex_extra.src.log")

local M = {}

local default_opts = {
    load_langs = { "es-AR", "en-US" },
    init_check = true,
}

M.opts = {}

local ltex_languages = {
    "en-GB",
    "nl-BE",
    "en-US",
    "fr",
    "auto",
}

local register_user_cmds = function()
    vim.api.nvim_create_user_command("LtexSwitchLang", function()
        vim.ui.select(ltex_languages, {
            prompt = "Select language:",
        }, function(choice)
            require("ltex_extra.src.commands-lsp").switchLanguage(choice)
        end)
    end, { desc = "ltex_extra.nvim: Switch sever language" })
end

M.setup = function(opts)
    log.trace("Merge options")
    M.opts = opts or default_opts
    for key, value in pairs(default_opts) do
        if not M.opts[key] then
            M.opts[key] = value
        end
    end

    log.trace("Add commands to lsp")
    register_user_cmds()
    vim.lsp.commands['_ltex.addToDictionary']    = require("ltex_extra.src.commands-lsp").addToDictionary
    vim.lsp.commands['_ltex.hideFalsePositives'] = require("ltex_extra.src.commands-lsp").hideFalsePositives
    vim.lsp.commands['_ltex.disableRules']       = require("ltex_extra.src.commands-lsp").disableRules

    log.trace("Inital load files")
    if opts.init_check == true then
        require("ltex_extra.src.commands-lsp").updateConfigFull(opts.load_langs)
    end
end

return M

-- Dev notes:
--
-- Dummy functions for test vim.lsp.commands
-- local dummy_calls = 0
-- local dummy_cmd = function()
--     print(dummy_calls)
--     dummy_calls = dummy_calls + 1
--     print(dummy_calls)
-- end

-- Inspect function for arguments. Doesn't work after nvim 0.7.
-- local orig_execute_command = vim.lsp.buf.execute_command
-- vim.lsp.buf.execute_command = function (command)
--     print(vim.inspect(command))
--     orig_execute_command(command)
-- end