local M = {
	'folke/todo-comments.nvim',
	id = 'todo',

	keymaps = {
		-- You can override it with ':TodoTelescope<CR>' if you prefer Telescope.
		{ 'n', '<space>T', ':TodoTrouble<CR>' },
	},

	config = function(config)
		local has_t, telescope = pcall(require, 'telescope')
		if has_t then
			telescope.setup({
				extensions = {
					todo = { --
						layout_strategy = 'vertical',
						layout_config = { width = 0.8 },
					},
				},
			})
		end

		require('todo-comments').setup(config.todo)
	end,
}

M.defaultConfig = {
	'todo',
	{
		signs = false, -- show icons in the signs column
		sign_priority = 8, -- sign priority

		-- keywords recognized as todo comments
		keywords = {

			FIX = {
				icon = ' ', -- icon used for the sign, and in search results
				color = 'error', -- can be a hex color, or a named color (see below)
				alt = { 'Fix', 'Bug', 'Issue', 'FIXME', 'BUG', 'FIXIT', 'ISSUE' }, -- a set of other keywords that all map to this FIX keywords
				-- signs = false, -- configure signs for some keywords individually
			},
			TODO = { icon = '', color = 'info', alt = { 'Todo' } },
			HACK = { icon = '', color = 'warning', alt = { 'Hack' } },
			WARN = { icon = '', color = 'warning', alt = { 'Warn', 'WARNING', 'XXX' } },
			PERF = { icon = '󰅒', alt = { 'Perf', 'OPTIM', 'PERFORMANCE', 'OPTIMIZE' } },
			NOTE = { icon = '󰍨', color = 'hint', alt = { 'Note', 'INFO', 'Info' } },
			TEST = { icon = '󰙨', color = 'test', alt = { 'Test', 'TESTING', 'PASSED', 'FAILED' } },
		},

		gui_style = {
			fg = 'NONE', -- The gui style to use for the fg highlight group.
			bg = 'BOLD', -- The gui style to use for the bg highlight group.
		},

		merge_keywords = true, -- when true, custom keywords will be merged with the defaults

		-- highlighting of the line containing the todo comment
		-- * before: highlights before the keyword (typically comment characters)
		-- * keyword: highlights of the keyword
		-- * after: highlights after the keyword (todo text)
		highlight = {
			-- NOTE: dsad
			before = '', -- "fg" or "bg" or empty
			keyword = 'wide', -- "fg", "bg", "wide" or empty. (wide is the same as bg, but will also highlight surrounding characters)
			after = 'fg', -- "fg" or "bg" or empty
			pattern = [[.*<(KEYWORDS)\s*:]], -- pattern or table of patterns, used for highlightng (vim regex)
			comments_only = true, -- uses treesitter to match keywords in comments only
			max_line_len = 400, -- ignore lines longer than this
			exclude = {}, -- list of file types to exclude highlighting
		},

		-- list of named colors where we try to extract the guifg from the
		-- list of hilight groups or use the hex color if hl not found as a fallback
		colors = {
			error = { 'DiagnosticError', 'ErrorMsg', '#DC2626' },
			warning = { 'DiagnosticWarning', 'WarningMsg', '#FBBF24' },
			info = { 'DiagnosticInfo', '#2563EB' },
			hint = { 'DiagnosticHint', '#10B981' },
			default = { 'Identifier', '#7C3AED' },
		},

		search = {
			command = 'rg',
			args = { '--color=never', '--no-heading', '--with-filename', '--line-number', '--column' },
			-- regex that will be used to match keywords.
			-- don't replace the (KEYWORDS) placeholder
			pattern = [[\b(KEYWORDS):]], -- ripgrep regex
			-- pattern = [[\b(KEYWORDS)\b]], -- match without the extra colon. You'll likely get false positives
		},
	},
}

return M
