--[[ Constants
    * (all lua builtins that don't allow io/executing code)
    color (interface)
    gui (interface)
    multi (interface bound to a processor) no thread module

    callback true/false confirm/wrong
]]
local label

local function noOf(sx,sy,sw,sh)
    return 0,0,0,0,sx,sy,sw,sh
end

local choiceList = {}
local allBoxes = {}
local confirm
local selected

local function index(window, q, callback)
    label = window:newTextLabel("  " ..q.title.. "  ",noOf(0,0,1,.3))
    label.align = ALIGN_CENTER
    label.textColor = color.white
    label.color = color.new("#363ac8")
    label:setFont(50)
    choices = window:newFrame(noOf(0,.3,1,.7))
    choices.color = color.new("#363ac8")
    
    function choices:newChoice(choice, i)
        local c = choices:newFrame(noOf(.25,(i-1)/#q.choices,.5,1/#q.choices))
        c.visibility = 0
        local box = c:newImageButton("assets/images/unchecked.png",noOf(.024*(#q.choices/4),.1,0,.8))
        box.checked = false
        box:OnReleased(function()
            if box.checked then
                box:setImage("assets/images/unchecked.png")
            else
                for _, other in pairs(allBoxes) do
                    other.checked = false
                    other:setImage("assets/images/unchecked.png")
                end
                box:setImage("assets/images/checked.png")
                selected = i
            end
            box.checked = not checked
        end)

        box.square = "h"
        c.drawBorder = false
        local choiceText = c:newTextLabel(choice,noOf(.3,0,1,1))
        choiceText.visibility = 0
        choiceText.textColor = color.white
        -- choiceText.align = window.ALIGN_CENTER
        choiceText:setFont(40)
        table.insert(choiceList,choiceText)
        table.insert(allBoxes,box)

    end

    for i,choice in pairs(q.choices) do
        choices:newChoice(choice, i)
    end

    local correct, wrong, netural = color.new("#52b11b"), color.new("#bd2626"), color.new("#5d5d5d")
    confirm = choices:newTextButton("Confirm",0,0,0,0,.01,1-(1/#q.choices),.24,.9/#q.choices)
    confirm.color = netural
    gui.apply({
        align=gui.ALIGN_CENTER,
        OnReleased=function(self)
            if selected == q.answer then
                confirm.color = correct
                timer(1,function()
                    callback(true)
                end)
            else 
                confirm.color = wrong
                timer(1,function()
                    confirm.color = netural
                    callback(false)
                end)
            end
        end,
    },confirm)
end

local function update(dt) -- time in seconds that has passed since
    -- label:fitFont()
    label:centerFont()
    for _, obj in pairs(choiceList) do
        obj:centerFont()
        -- obj:fitFont(nil, nil, {scale = 2/3})
    end
    confirm:fitFont(nil, nil, {scale = 2/3})
    confirm:centerFont()
    -- print(box.parent:getAbsolutes())
    -- print(box:getAbsolutes())
end

return {
    index = index,
    update = update
}
