package.loaded["draw"] = nil

require("draw")

BotState = {
	lastMessage = 0,
	cpuBattery = nil,
	cpuBatteryCorrected = nil,
	servoBattery = nil,
	servoBatteryCorrected = nil,
	camfeed = nil,
}

Ping = {
	timeSent = 0,
	latency = "unknown",
	payload = nil,
}

function love.update2()
	local now = love.timer.getTime()
	if now - Ping.timeSent > 5 then
		Ping.payload = ""
		for i = 0, 10 do
			Ping.payload = Ping.payload .. string.char(love.math.random(65, 91))
		end
		Ping.timeSent = now
		love.mqtt.send("command/ping", Ping.payload)
		print("Sending ping")
	end
end

function formatSafe(format, value, ...)
	if value == nil then
		return "unknown"
	end
	return string.format(format, value, ...)
end

function love.load()
	love.graphics.setFont(love.graphics.newFont(20))
	love.window.setFullscreen(true)
	love.mqtt.subscribe("telemetry/#")
end

function love.mqtt.message(topic, payload)
	local oldTime = BotState.lastMessage
	BotState.lastMessage = love.timer.getTime()

	if topic == "telemetry/cpu_battery" then
		BotState.cpuBattery = tonumber(payload)
		BotState.cpuBatteryCorrected = BotState.cpuBattery / 2
	elseif topic == "telemetry/servo_battery" then
		BotState.servoBattery = tonumber(payload)
		BotState.servoBatteryCorrected = BotState.servoBattery / 2
	elseif topic == "telemetry/camfeed" then
		print("Got camfeed")
		fileData = love.filesystem.newFileData(payload, "camfeed")
		BotState.camfeed = love.graphics.newImage(fileData)
	elseif topic == "telemetry/pong" then
		if payload == Ping.payload then
			local timeReceived = love.timer.getTime()
			Ping.latency = math.floor((timeReceived - Ping.timeSent) * 1000) .. "ms"
		end
	else
		print("Got unknown telemetry at " .. topic)
		BotState.lastMessage = oldTime
	end
end

function love.gamepadpressed(joystick, button)
	print("Pressed gamepad button " .. button .. " on joystick " .. joystick:getName())
end