
local M = {}

local htmlTexture = require("htmlTexture")
local unitType
local materialName = nil
local htmlPath = nil

local width = 512
local height = width / 2
--разрешение нашей будующей текстуры.

local updateFPS = 30
local uiIsReady = false
local odometerVal = 0
local second = 0

local function Odometer(jbeamData) -- функция срабатывает при спавне авто
	odometerVal = math.random(0, 100000) -- случайный выбор изначального пробега. от 0 до 1000
	unitType = settings.getValue('uiUnitLength') or 'metric' -- к переменной присваиваем значение системы измерения 'imperial' - мили 'metric' - кмч
	materialName = jbeamData.materialName -- к переменной присваиваем наше название материала
	htmlPath = jbeamData.htmlPath -- к перменной присваиваем путь к хтмл файлу

	if not materialName or not htmlPath then
		M.updateGFX = nop -- ошибка, если нет имени материала или пути к хтмл
	else
		htmlTexture.create(materialName, htmlPath, width, height, updateFPS, "automatic")
	end
end

local function updateGFX(dt) -- функция срабатывает каждый игровой кадр
	local wheelspeed = electrics.values.wheelspeed
	if not uiIsReady then return end -- если js по каким-то причинам не отправил вызов на функцию uiReady, то код ниже не будет срабатывать
	if playerInfo.anyPlayerSeated then -- код будет срабатывать, только если мы за рулём.
		local data = {}
		second = second + dt
		if (second >= 0.5) then -- отклик ~ каждые пол секунды
			if (wheelspeed >= 0.3) then -- 0.3 * 3.6 = ~1 км/ч
				odometerVal = odometerVal + electrics.values.wheelspeed / 6500 -- 3600 * 2 т.к. пол секунды отклик
			end
			second = 0
		end
		data.distance = odometerVal
		htmlTexture.call(materialName, "updateData", data) -- запрос на обновление html и отправляет в него переменную data
	end
end

local function uiReady() -- будем вызывать эту функцию из js файла 
	htmlTexture.call(materialName, "setUnits", {unitType = unitType}) -- запрос на изменение системы счисления
	uiIsReady = true
end

M.init = Odometer
M.updateGFX = updateGFX
M.uiReady = uiReady

return M