local M = {}

function M.config_cmp()
    local cmp = require("cmp")
    local luasnip = require("luasnip")
    cmp.setup({
        completion = {
            completeopt = "menuone,noinsert",
            autocomplete = false,
        },
        snippet = {
            expand = function(args)
                require("luasnip").lsp_expand(args.body)
            end,
        },
        sources = {
            { name = "nvim_lsp" },
            { name = "luasnip" },
            { name = "buffer" },
            { name = "spell" },
        },
        mapping = cmp.mapping.preset.insert({
            -- Scroll docs with readline back - forward
            ["<C-b>"] = cmp.mapping.scroll_docs(-4),
            ["<C-f>"] = cmp.mapping.scroll_docs(4),
            -- Expand snippets with Tab
            ["<Tab>"] = cmp.mapping(function(fallback)
                if luasnip.expand_or_jumpable() then
                    luasnip.expand_or_jump()
                else
                    fallback()
                end
            end),
            -- Start and cycle completions with C-Space
            ["<C-Space>"] = cmp.mapping(function()
                if cmp.visible() then
                    cmp.select_next_item()
                else
                    cmp.complete()
                end
            end),
            -- Confirm completion with Enter
            ["<CR>"] = cmp.mapping.confirm({ select = true }),
        }),
    })

    -- Add a plug mapping to use in C-Space binding
    vim.api.nvim_set_keymap(
        "i",
        "<Plug>(cmp_complete)",
        "<cmd>lua require('cmp').complete()<CR>",
        { silent = true, noremap = true }
    )
end

return M