local Log = {}

Log.codes = {}
Log.levels = {
	{ "debug", "Comment" },
	{ "info", "None" },
	{ "warn", "WarningMsg" },
	{ "error", "ErrorMsg" },
}

function Log:init(options)
	self.level = options.level
	return self
end

-- Initialize logger with log functions for each level
for i = 1, #Log.levels do
	local level, hl = unpack(Log.levels[i])

	Log.codes[level] = i

	Log[level] = function(self, message)
		-- Skip if log level is not set or the log is below the configured or default level
		if not self.level or self.codes[level] < self.codes[self.level] or type(message) ~= "string" then
			return
		end

		vim.schedule(function()
			local escaped_message = vim.fn.escape(message, '"'):gsub("\n", "\\n")

			vim.cmd(string.format("echohl %s", hl))
			vim.cmd(string.format([[echom "[%s] %s"]], "presence.nvim", escaped_message))
			vim.cmd("echohl NONE")
		end)
	end
end

return Log