minetest.register_privilege("ctf_match", {
	description = "can skip matches"
})

minetest.register_chatcommand("ctf_next", {
	description = "Skip to the next match",
	privs = {
		ctf_match = true
	},
	func = function(name, param)
		ctf_match.next()
		minetest.log("action", name .. " ran /ctf_next")
	end
})

minetest.register_chatcommand("ctf_start", {
	description = "End build time",
	privs = {
		ctf_match = true
	},
	func = function(name, param)
		ctf_match.build_timer = 0.01
		minetest.log("action", name .. " ran /ctf_start")
	end
})


minetest.register_chatcommand("ctf_respawn", {
	description = "Respawn a player (clean inv, send to base)",
	privs = {
		ctf_team_mgr = true
	},
	func = function(name, param)
		minetest.log("action", name .. " ran /ctf_respawn " .. param)
		local tplayer = ctf.player_or_nil(param)
		if tplayer then
			local player = minetest.get_player_by_name(param)
			if player then
				ctf.move_to_spawn(param)
				give_initial_stuff(player)
				minetest.chat_send_player(param,
					"You were sent back to base and your inventory wiped (by " .. name .. ")")
				return true, "Moved player to spawn and wiped inventory."
			else
				return false, "Player is not online."
			end
		else
			return false, "Player does not exist or is not in any teams."
		end
	end
})

local restart_on_next_match = false
local restart_on_next_match_by = nil
minetest.register_chatcommand("restart", {
	description = "Queue server restart",
	privs = {
		server = true
	},
	func = function(name, param)
		restart_on_next_match = true
		restart_on_next_match_by = name
		minetest.log("action", name .. " queued a restart")
		return true, "Restart queued."
	end
})

minetest.register_chatcommand("unqueue_restart", {
	description = "Unqueue server restart",
	privs = {
		server = true
	},
	func = function(name, param)
		restart_on_next_match = false
		minetest.log("action", name .. " un-queued a restart")
		return true, "Restart cancelled."
	end
})


local function file_exists(path)
	local file = io.open(path, "r")
	if file then
		file:close()
		return true
	end

	return false
end

ctf_match.register_on_new_match(function()
	if restart_on_next_match then
		minetest.chat_send_player(restart_on_next_match_by, "Shutting down now!")
		minetest.request_shutdown("Restarting server at operator request.", true)
		return
	end

	local path = minetest.get_worldpath() .. "/queue_restart.txt"
	if file_exists(path) then
		assert(os.remove(path))

		minetest.request_shutdown("Restarting server at operator request.", true)
		return
	end
end)