local M = {
	'williamboman/mason.nvim',

	desc = 'Easily install and manage LSP servers, DAP servers, linters, and formatters.',

	config = function(config)
		require('mason').setup(config.mason)
	end,
}

M.defaultConfig = function(config)
	local util = require('one.util')
	local sym = config.symbolMap

	return {
		'mason',
		{
			ui = {
				-- Whether to automatically check for new versions when opening the :Mason window.
				check_outdated_packages_on_open = false,

				-- The border to use for the UI window. Accepts same border values as |nvim_open_win()|.
				border = 'single',

				icons = {
					-- The list icon to use for installed packages.
					package_installed = sym.INSTALLED,
					-- The list icon to use for packages that are installing, or queued for installation.
					package_pending = sym.PENDING,
					-- The list icon to use for packages that are not installed.
					package_uninstalled = sym.UNINSTALLED,
				},

				keymaps = {
					-- Keymap to expand a package
					toggle_package_expand = '<Tab>',
					-- Keymap to install the package under the current cursor position
					install_package = '<CR>',
					-- Keymap to reinstall/update the package under the current cursor position
					update_package = 'u',
					-- Keymap to check for new version for the package under the current cursor position
					check_package_version = 'c',
					-- Keymap to update all installed packages
					update_all_packages = 'U',
					-- Keymap to check which installed packages are outdated
					check_outdated_packages = 'C',
					-- Keymap to uninstall a package
					uninstall_package = 'x',
					-- Keymap to cancel a package installation
					cancel_installation = '<C-c>',
					-- Keymap to apply language filter
					apply_language_filter = '<M-f>',
				},
			},

			-- The directory in which to install packages.
			install_root_dir = util.dataPath('mason'),

			pip = {
				-- These args will be added to `pip install` calls. Note that setting extra args might impact intended behavior
				-- and is not recommended.
				--
				-- Example: { "--proxy", "https://proxyserver" }
				install_args = {},
			},

			-- Controls to which degree logs are written to the log file. It's useful to set this to vim.log.levels.DEBUG when

			-- Limit for the maximum amount of packages to be installed at the same time. Once this limit is reached, any further
			-- packages that are requested to be installed will be put in a queue.
			max_concurrent_installers = 4,

			github = {
				-- The template URL to use when downloading assets from GitHub.
				-- The placeholders are the following (in order):
				-- 1. The repository (e.g. "rust-lang/rust-analyzer")
				-- 2. The release version (e.g. "v0.3.0")
				-- 3. The asset name (e.g. "rust-analyzer-v0.3.0-x86_64-unknown-linux-gnu.tar.gz")
				download_url_template = util.proxyGithub('https://github.com/%s/releases/download/%s/%s'),
			},
		},
	}
end

return M
