--[[
DashboardClock - HARDCODED VERSION
Author: Ágica
Description: Analóg óra (játékidő) animálása XML olvasás nélkül (IFA W50).
]]

DashboardClock = {}

-- Jelezzük, hogy a script él
print("::DashboardClock:: Script betöltve (XML mentes mód).")

function DashboardClock.prerequisitesPresent(specializations)
    return true
end

function DashboardClock.registerEventListeners(vehicleType)
    SpecializationUtil.registerEventListener(vehicleType, "onLoad", DashboardClock)
    SpecializationUtil.registerEventListener(vehicleType, "onUpdate", DashboardClock)
end

function DashboardClock:onLoad(savegame)
    self.spec_dashboardClock = {}
    local spec = self.spec_dashboardClock

    -- ITT A LÉNYEG: Nem kérdezősködünk az XML-től, megmondjuk a fix címet!
    -- hourNodeStr  = az a kis mutató minNodeStr= nagymutató értéke kacsacsőr nélkül kell megadni.
    local hourNodeStr = "123|1|0"
    local minNodeStr = "123|1|1"

    print("::DashboardClock:: Mutatók keresése... Óra: " .. hourNodeStr .. " | Perc: " .. minNodeStr)

    spec.hourNode = I3DUtil.indexToObject(self.components, hourNodeStr, self.i3dMappings)
    spec.minuteNode = I3DUtil.indexToObject(self.components, minNodeStr, self.i3dMappings)

    -- Ellenőrzés
    if spec.hourNode ~= nil then
        -- print("::DashboardClock:: Óra mutató OK.")
        -- Alaphelyzetbe állítás
        local rx, ry, rz = getRotation(spec.hourNode)
        setRotation(spec.hourNode, rx, 0, rz)
    else
        print("::DashboardClock:: HIBA! Nem találom az ÓRA mutatót (" .. hourNodeStr .. ")!")
    end

    if spec.minuteNode ~= nil then
        -- print("::DashboardClock:: Perc mutató OK.")
        -- Alaphelyzetbe állítás
        local rx, ry, rz = getRotation(spec.minuteNode)
        setRotation(spec.minuteNode, rx, 0, rz)
    else
        print("::DashboardClock:: HIBA! Nem találom a PERC mutatót (" .. minNodeStr .. ")!")
    end
end

function DashboardClock:onUpdate(dt, isActiveForInput, isActiveForInputIgnoreSelection, isSelected)
    local spec = self.spec_dashboardClock
    
    -- Ha nincsenek meg a node-ok, kilépünk
    if spec.hourNode == nil or spec.minuteNode == nil then return end

    -- JÁTÉK IDŐ LEKÉRÉSE
    -- g_currentMission.environment.dayTime = ezredmásodpercek éjfél óta
    local dayTime = g_currentMission.environment.dayTime
    
    -- Átszámolás percekre
    local totalMinutes = dayTime / 60000
    
    -- --- PERC SZÁMÍTÁS ---
    -- 0-60 perc -> 0-(-360) fok
    local currentMinute = totalMinutes % 60
    local minRotation = (currentMinute / 60) * -360
    
    -- --- ÓRA SZÁMÍTÁS ---
    -- 0-12 óra -> 0-(-360) fok
    local totalHours = totalMinutes / 60
    local currentHour12 = totalHours % 12
    local hourRotation = (currentHour12 / 12) * -360

    -- --- FORGATÁS (Y TENGELY) ---
    -- Perc mutató
    local rxM, ryM, rzM = getRotation(spec.minuteNode)
    setRotation(spec.minuteNode, rxM, math.rad(minRotation), rzM)

    -- Óra mutató
    local rxH, ryH, rzH = getRotation(spec.hourNode)
    setRotation(spec.hourNode, rxH, math.rad(hourRotation), rzH)
end