-- GraphicsMenu.lua

local P = createMenuSheet("GraphicsMenu")

P.buttonList = {}

function P.onShow()
    --indices to iterate through buttonlist (trivial in this menu sheet)
    P.oldindex = -2
    P.index = -1
end

function P.onLoad()
    block = true
    file = orxonox.PathConfig:getConfigPathString() .. orxonox.getConfig("GraphicsManager", "ogreConfigFile_")
    search_mode = 0
    f = io.open(file, "r")
    firstline = f:read("*line")
    rendersystem = string.sub(firstline, 15)
    for line in f:lines() do
        if search_mode == 0 then
            if string.find(line, rendersystem) ~= nil then
                search_mode = 1
            end
        end
        if search_mode == 1 then
            if string.sub(line, 1, 11) == "Full Screen" then
                if string.sub(line, 13) == "Yes" then
                    fullscreen = true
                else
                    fullscreen = false
                end
            end
            if string.sub(line, 1, 10) == "Video Mode" then
                if string.match(line, "@") == "@" then
                    resolution = string.sub(line, 12, string.find(line, "@")-2)
                else
                    resolution = string.sub(line, 12)
                end
                break
            end
        end
    end
    f:close()
    local fullscreenwindow = tolua.cast(winMgr:getWindow("orxonox/FullscreenCheckbox"),"CEGUI::Checkbox")
    fullscreenwindow:setSelected(fullscreen)
    listboxwindow = winMgr:getWindow("orxonox/ResolutionListbox")
    local resolutionList = {}
    table.insert(resolutionList, "640 x 480")
    table.insert(resolutionList, "720 x 480")
    table.insert(resolutionList, "720 x 576")
    table.insert(resolutionList, "800 x 480")
    table.insert(resolutionList, "800 x 600")
    table.insert(resolutionList, "1024 x 480")
    table.insert(resolutionList, "1024 x 600")
    table.insert(resolutionList, "1024 x 768")
    table.insert(resolutionList, "1152 x 864")
    table.insert(resolutionList, "1280 x 720")
    table.insert(resolutionList, "1280 x 768")
    table.insert(resolutionList, "1440 x 900")
    for k,v in pairs(resolutionList) do
        item = CEGUI.createListboxTextItem(v)
        item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush")
        CEGUI.toListbox(listboxwindow):addItem(item)
    end
    if resolution == "640 x 480" then
        listboxwindow:setItemSelectState(0,true)
    elseif resolution == "720 x 480" then
        listboxwindow:setItemSelectState(1,true)
    elseif resolution == "720 x 576" then
        listboxwindow:setItemSelectState(2,true)
    elseif resolution == "800 x 480" then
        listboxwindow:setItemSelectState(3,true)
    elseif resolution == "800 x 600" then
        listboxwindow:setItemSelectState(4,true)
    elseif resolution == "1024 x 480" then
        listboxwindow:setItemSelectState(5,true)
    elseif resolution == "1024 x 600" then
        listboxwindow:setItemSelectState(6,true)
    elseif resolution == "1024 x 768" then
        listboxwindow:setItemSelectState(7,true)
    elseif resolution == "1152 x 864" then
        listboxwindow:setItemSelectState(8,true)
    elseif resolution == "1280 x 720" then
        listboxwindow:setItemSelectState(9,true)
    elseif resolution == "1280 x 768" then
        listboxwindow:setItemSelectState(10,true)
    elseif resolution == "1440 x 900" then
        listboxwindow:setItemSelectState(11,true)
    end
    scrollbar_active = false
    block = false

    local item = {
            ["button"] = winMgr:getWindow("orxonox/GraphicsBackButton"),
            ["function"]  = P.GraphicsBackButton_clicked
    }
    P.buttonList[1] = item
end

function P.GraphicsResolutionListbox_changed(e)
    if listboxwindow:isItemSelected(0) then
        resolution = "640 x 480"
    elseif listboxwindow:isItemSelected(1) then
        resolution = "720 x 480"
    elseif listboxwindow:isItemSelected(2) then
        resolution = "720 x 576"
    elseif listboxwindow:isItemSelected(3) then
        resolution = "800 x 480"
    elseif listboxwindow:isItemSelected(4) then
        resolution = "800 x 600"
    elseif listboxwindow:isItemSelected(5) then
        resolution = "1024 x 480"
    elseif listboxwindow:isItemSelected(6) then
        resolution = "1024 x 600"
    elseif listboxwindow:isItemSelected(7) then
        resolution = "1024 x 768"
    elseif listboxwindow:isItemSelected(8) then
        resolution = "1152 x 864"
    elseif listboxwindow:isItemSelected(9) then
        resolution = "1280 x 720"
    elseif listboxwindow:isItemSelected(10) then
        resolution = "1280 x 768"
    elseif listboxwindow:isItemSelected(11) then
        resolution = "1440 x 900"
    end
    search_mode = 0
    f = io.open(file, "r")
    firstline = f:read("*line")
    text = firstline .. "\n"
    rendersystem = string.sub(firstline, 15)
    for line in f:lines() do
        if search_mode == 0 then
            if string.find(line, rendersystem) ~= nil then
                search_mode = 1
            end
        end
        if search_mode == 1 then
            if string.sub(line, 1, 10) == "Video Mode" then
                if string.match(line, "@") == "@" then
                    line = "Video Mode=" .. resolution .. string.sub(line, string.find(line, "@")-1)
                else
                    line = "Video Mode=" .. resolution
                end
                search_mode = 2
            end
        end
        text = text .. line .. "\n"
    end
    f:close()
    f = io.open(file, "w")
    f:write(text)
    f:close()
end

function P.GraphicsBrightnessScrollbar_changed(e)
    if scrollbar_active == false then
        -- brightness
        logMessage(0, "event: brightness")
    end
end

function P.GraphicsBrightnessScrollbar_started(e)
    scrollbar_active = true
end

function P.GraphicsBrightnessScrollbar_ended(e)
    -- brightness
    logMessage(0, "event: brightness")
    scrollbar_active = false
end

function P.GraphicsFullscreenCheckbox_clicked(e)
    if block == false then
        search_mode = 0
        f = io.open(file, "r")
        firstline = f:read("*line")
        text = firstline .. "\n"
        rendersystem = string.sub(firstline, 15)
        for line in f:lines() do
            if search_mode == 0 then
                if string.find(line, rendersystem) ~= nil then
                    search_mode = 1
                end
            end
            if search_mode == 1 then
                if string.sub(line, 1, 11) == "Full Screen" then
                    if fullscreen == true then
                        line = "Full Screen=No"
                        fullscreen = false
                    else
                        line = "Full Screen=Yes"
                        fullscreen = true
                    end
                    search_mode = 2
                end
            end
            text = text .. line .. "\n"
        end
        f:close()
        f = io.open(file, "w")
        f:write(text)
        f:close()
    end
end

function P.GraphicsBackButton_clicked(e)
    hideMenuSheet(P.name)
end

function P.onKeyPressed() 
    buttonIteratorHelper(P.buttonList, code, P, 1, 1)
end

return P

