
local hud = {} -- playername -> data

local HUD_POSITION = {x = epic.hud.posx, y = epic.hud.posy}
local HUD_ALIGNMENT = {x = 1, y = 0}

local get_color = function(r,g,b)
	return b + (g * 256) + (r * 256 * 256)
end

local function setup(playername, name)
	if hud[playername] then
		return
	end

	local player = minetest.get_player_by_name(playername)
	local data = {}

	data.name = player:hud_add({
		[minetest.features.hud_def_type_field and "type" or "hud_elem_type"] = "text",
		position = HUD_POSITION,
		offset = {x = 0,  y = 0},
		text = name or "",
		alignment = HUD_ALIGNMENT,
		scale = {x = 100, y = 100},
		number = 0x00FF00
	})

	data.time = player:hud_add({
		[minetest.features.hud_def_type_field and "type" or "hud_elem_type"] = "text",
		position = HUD_POSITION,
		offset = {x = 0,  y = 20},
		text = "",
		alignment = HUD_ALIGNMENT,
		scale = {x = 100, y = 100},
		number = 0x00FF00
	})

	hud[playername] = data
end

local function exit_cleanup(playername)
	local data = hud[playername]
	local player = minetest.get_player_by_name(playername)

	if not data or not player then
		return
	end

	if data.name then
		player:hud_remove(data.name)
	end

	if data.time then
		player:hud_remove(data.time)
	end

	hud[playername] = nil
end

epic.register_hook({
	on_execute_epic = function(player, _, state)
		setup(player:get_player_name(), state.name)
	end,

	on_epic_exit = exit_cleanup,
	on_epic_abort = exit_cleanup
})

local function update()
	for playername, state in pairs(epic.state) do
		local data = hud[playername]
		local player = minetest.get_player_by_name(playername)

		if player and data and data.time then
			local color = get_color(0,255,0)
			local time_str = ""

			if state.time and state.time > 0 then
				time_str = epic.format_time(state.time)

				if state.time < 300 then
					color = get_color(255,255,0)
				elseif state.time < 60 then
					color = get_color(255,0,0)
				end
			end

			player:hud_change(data.time, "text", time_str)
			player:hud_change(data.time, "number", color)
		end

	end
	minetest.after(1.0, update)
end

minetest.after(1.0, update)
