Pitchfork = {}

-- GUI osztály
local VideoPlayerScreen = {}
local VideoPlayerScreen_mt = Class(VideoPlayerScreen, ScreenElement)

VideoPlayerScreen.CONTROLS = { "videoElement" }

function VideoPlayerScreen.new(target, customMt)
    local self = ScreenElement.new(target, customMt or VideoPlayerScreen_mt)
    self:registerControls(VideoPlayerScreen.CONTROLS)
    return self
end

function VideoPlayerScreen:onOpen()
    VideoPlayerScreen:superClass().onOpen(self)
    if self.videoElement ~= nil and self.videoFile ~= nil then
        self.videoElement:changeVideo(self.videoFile)
        self.videoElement:playVideo()
    else
        print("[ERROR] videoElement or videoFile is NIL!")
    end
end

function VideoPlayerScreen:onVideoEnd()
    g_gui:showGui(nil)
end

function Pitchfork.prerequisitesPresent(specializations)
    return true
end

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

function Pitchfork:onLoad(savegame)
    self.canToggle = true

    local modEnv = self.customEnvironment or ""
    self.modDir = g_modsDirectory .. modEnv .. "/"

    Pitchfork.guiLoaded = false
    Pitchfork.videoScreen = nil

    for i = 1, 9 do
        self["videoPlayed" .. i] = false
    end
end

function Pitchfork:onUpdate(dt)
    if g_currentMission.player == nil or self.rootNode == nil then return end

    -- GUI betöltés, ha még nem töltöttük be 
    if not Pitchfork.guiLoaded and g_gui ~= nil then
        if Pitchfork.videoScreen == nil then
            Pitchfork.videoScreen = VideoPlayerScreen.new()
            VideoPlayerScreen.modDir = self.modDir

            local xmlPath = self.modDir .. "gui/videoPlayer.xml"
            print("[PITCHFORK] Betöltendő GUI XML:", xmlPath)
            g_gui:loadGui(xmlPath, "VideoPlayerScreen", Pitchfork.videoScreen)
        end
        Pitchfork.guiLoaded = true
        print("[PITCHFORK] GUI betöltve")
    end

    -- Távolságfigyelés játékoshoz
    local px, _, pz = getWorldTranslation(self.rootNode)
    local vx, _, vz = getWorldTranslation(g_currentMission.player.rootNode)
    local distance = MathUtil.vector2Length(px - vx, pz - vz)

    if distance < 3 then
        local instructionTexts = {
            "Nyomd meg a CTRL + 1 gombot Maize Plus Bevezető",
            "Nyomd meg a CTRL + 2 gombot Maize Plus funkciói és felépítése",
            "Nyomd meg a CTRL + 3 gombot Tartalmak, Fű és Széna",
            "Nyomd meg a CTRL + 4 gombot Fű, CCM, Takarmányozások, Abrakozás, Víz",
            "Nyomd meg a CTRL + 5 gombot Deuka takarmány, Kiegészítők, Beszerzési pontok",
            "Nyomd meg a CTRL + 6 gombot Alapanyagok, Bálák, Silók, Sörtörköly, Szeletek, Pépek, Eszközök, Vetőmag, Tudnivalók",
            "Nyomd meg a CTRL + 7 gombot Külön köszönet",
            "Nyomd meg a CTRL + 8 gombot Hogyan is készült",
            "Nyomd meg a CTRL + 9 gombot Pistabácsi bulizik"
        }
        for _, text in ipairs(instructionTexts) do
            g_currentMission:addExtraPrintText(text)
        end
    end

    -- Ctrl+1..9 videók lejátszása video1.ogv .. video9.ogv
    for i = 1, 9 do
        local key = Input["KEY_" .. i]
        if Input.isKeyPressed(Input.KEY_lctrl) and Input.isKeyPressed(key) then
            if not self["videoPlayed" .. i] then
                self["videoPlayed" .. i] = true
                local videoFile = self.modDir .. "videos/video" .. i .. ".ogv"
                Pitchfork.videoScreen.videoFile = videoFile
                g_gui:showGui("VideoPlayerScreen")
                g_currentMission:addExtraPrintText("video" .. i)
                print("[PITCHFORK] Lejátszás: video" .. i .. ".ogv")
            end
        else
            self["videoPlayed" .. i] = false
        end
    end

    self:raiseActive()
end