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

local M = {}

local default_opts = {
    load_langs = { "nl-BE", "en-US" },
    init_check = true,
}

M.opts = {}

local ltex_languages = {
    "en-US",
    "en-GB",
    "nl-BE",
    "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