lua/nightblossom/highlights.lua
local M = {}

function M.get_groups(p)
	local group = {

		-- Core editor
		Normal          = { fg = p.fg, bg = p.bg },
		NormalFloat     = { fg = p.fg, bg = p.bg },
		Comment         = { fg = p.fg_dim },
		Constant        = { fg = p.coral },
		String          = { fg = p.peach },
		Character       = { fg = p.peach },
		Number          = { fg = p.coral },
		Boolean         = { fg = p.coral },
		Float           = { fg = p.coral },
		Identifier      = { fg = p.cyan },
		Function        = { fg = p.purple },
		Statement       = { fg = p.magenta },
		Conditional     = { fg = p.magenta },
		Repeat          = { fg = p.magenta },
		Label           = { fg = p.magenta },
		Operator        = { fg = p.pink },
		Keyword         = { fg = p.magenta },
		Exception       = { fg = p.red },
		PreProc         = { fg = p.cyan },
		Include         = { fg = p.magenta },
		Define          = { fg = p.magenta },
		Macro           = { fg = p.magenta },
		Type            = { fg = p.pink },
		StorageClass    = { fg = p.magenta },
		Structure       = { fg = p.pink },
		Typedef         = { fg = p.pink },
		Special         = { fg = p.pink },
		SpecialComment  = { fg = p.grape },
		Underlined      = { fg = p.peach, underline = true },
		Ignore          = { fg = p.grape },
		Error           = { fg = p.red },
		Todo            = { fg = p.cyan },
		WarningMsg      = { fg = p.yellow },
		ErrorMsg        = { fg = p.red },
		MsgArea         = { fg = p.fg },
		MoreMsg         = { fg = p.purple },
		ModeMsg         = { fg = p.pink },
		Question        = { fg = p.pink },
		EndOfBuffer     = { fg = p.bg },

		-- UI
		ColorColumn     = { bg = p.bg_alt },
		Cursor          = { fg = p.bg, bg = p.pink },
		CursorLine      = { bg = p.bg_alt },
		CursorColumn    = { bg = p.bg_alt },
		LineNr          = { fg = p.fg_dim },
		CursorLineNr    = { fg = p.pink },
		VertSplit       = { fg = p.fg_dim },
		Visual          = { bg = p.grape },
		Search          = { bg = p.grape, fg = p.bg },
		IncSearch       = { bg = p.pink, fg = p.bg },
		CurSearch       = { bg = p.pink, fg = p.bg },
		MatchParen      = { bg = p.grape, bold = true },
		FloatBorder     = { fg = p.pink, bg = p.bg },
		Pmenu           = { fg = p.fg, bg = p.bg },
		PmenuSel        = { fg = p.pink, bg = p.bg_alt },
		PmenuSbar       = { bg = p.bg_alt },
		PmenuThumb      = { bg = p.pink },
		StatusLine      = { fg = p.fg, bg = p.bg },
		StatusLineNC    = { fg = p.fg_dim, bg = p.bg },
		WinSeparator    = { fg = p.bg_alt },
		TabLine         = { fg = p.fg_dim, bg = p.bg },
		TabLineSel      = { fg = p.pink, bg = p.bg_alt },
		TabLineFill     = { bg = p.bg_alt },
		Title           = { fg = p.pink, bold = true },
		FloatTitle      = { fg = p.pink, bold = true },
		Directory       = { fg = p.fg, bg = p.bg },

		-- Diagnostics (for built-in LSP signs + message)
		DiagnosticError             = { fg = p.red },
		DiagnosticWarn              = { fg = p.yellow },
		DiagnosticInfo              = { fg = p.cyan },
		DiagnosticHint              = { fg = p.pink },
		DiagnosticOk                = { fg = p.green },
		DiagnosticFloatingError     = { fg = p.red },
		DiagnosticFloatingWarn      = { fg = p.yellow },
		DiagnosticFloatingInfo      = { fg = p.cyan },
		DiagnosticFloatingHint      = { fg = p.pink },
		DiagnosticFloatingOk        = { fg = p.green },
		DiagnosticSignError         = { fg = p.red },
		DiagnosticSignWarn          = { fg = p.yellow },
		DiagnosticSignInfo          = { fg = p.cyan },
		DiagnosticSignHint          = { fg = p.pink },
		DiagnosticSignOk            = { fg = p.green },
		DiagnosticVirtualTextError  = { fg = p.red },
		DiagnosticVirtualTextWarn   = { fg = p.yellow },
		DiagnosticVirtualTextInfo   = { fg = p.cyan },
		DiagnosticVirtualTextHint   = { fg = p.pink },
		DiagnosticVirtualTextOk     = { fg = p.green },
		DiagnosticVirtualLinesError = { fg = p.red },
		DiagnosticVirtualLinesWarn  = { fg = p.yellow },
		DiagnosticVirtualLinesInfo  = { fg = p.cyan },
		DiagnosticVirtualLinesHint  = { fg = p.pink },
		DiagnosticVirtualLinesOk    = { fg = p.green },
		DiagnosticUnderlinesError   = { sp = p.red, undercurl = true },
		DiagnosticUnderlinesWarn    = { sp = p.yellow, undercurl = true },
		DiagnosticUnderlinesInfo    = { sp = p.cyan, undercurl = true },
		DiagnosticUnderlinesHint    = { sp = p.pink, undercurl = true },
		DiagnosticUnderlinesOk      = { sp = p.green, undercurl = true },

		-- Diff
		DiffAdd     = { bg = "#0d2e1f" },
		DiffDelete  = { bg = "#2a001a" },
		DiffChange  = { bg = p.bg },
		DiffText    = { bg = "#553d00" },
		--
		SpellBad    = { undercurl = true, sp = p.red },
		SpellCap    = { undercurl = true, sp = p.green },
		SpellLocal  = { undercurl = true, sp = p.cyan },
		SpellRare   = { undercurl = true, sp = p.purple },
	}
	return group
end

return M
