local input_type=controller.input.kb
local input_keys={}
local menu_opt = 0

function opcions_teclat_init()
    input_type=controller.input.kb
    -- definició de tecles a configurar en ordre
    input_keys = controller.kb_keys  
    opcions_input_init()
end

function opcions_gamepad_init()
    input_type=controller.input.pad
    -- definició de botons a configurar en ordre
    input_keys = controller.pad_keys
    opcions_input_init()
end

function opcions_input_init()
    surf.target(0)
    surf.cls(16)
    menu_opt = 1
    states:next()
end

function opcions_input_draw()
    surf.target(0)
    surf.cls(16)
    local s=""
    if input_type==controller.input.kb then
        s="PULSA TECLA PER A "
        if menu_opt==1 then
            arc_textB(s.."AMUNT", 40, 48, 13)
        elseif menu_opt==2 then
            arc_textB(s.."AVALL", 40, 48, 13)
        elseif menu_opt==3 then
            arc_textB(s.."ESQUERRA", 28, 48, 13)
        elseif menu_opt==4 then
            arc_textB(s.."DRETA", 40, 48, 13)
        elseif menu_opt==5 then
            arc_textB(s.."BOTAR", 40, 48, 13)
        elseif menu_opt==6 then
            arc_textB(s.."DISPAR", 36, 48, 13)
        end
    elseif input_type==controller.input.pad then
        s="PULSA BOTÓ PER A "
        if menu_opt==1 then
            arc_textB(s.."AMUNT", 44, 48, 13)
        elseif menu_opt==2 then
            arc_textB(s.."AVALL", 44, 48, 13)
        elseif menu_opt==3 then
            arc_textB(s.."ESQUERRA", 32, 48, 13)
        elseif menu_opt==4 then
            arc_textB(s.."DRETA", 44, 48, 13)
        elseif menu_opt==5 then
            arc_textB(s.."BOTAR", 44, 48, 13)
        elseif menu_opt==6 then
            arc_textB(s.."DISPAR", 40, 48, 13)
        elseif menu_opt==7 then
            arc_textB(s.."GPS ARRERE", 28, 48, 13)
        elseif menu_opt==8 then
            arc_textB(s.."GPS AVANT", 28, 48, 13)
        elseif menu_opt==9 then
            arc_textB(s.."PAUSA", 44, 48, 13)
        end
    end
end

function opcions_input_update()
    local curr_key = input_keys[menu_opt]
    
    if key.press(key.ESCAPE) then
        states:next()
        return
    end
    
    if input_type==controller.input.kb then
        local k = key.press()
        if k ~= 0 and k~=key.ESCAPE then
        -- print(k..", "..curr_key.name..", "..curr_key.code)
            config_key(curr_key, k)
            menu_opt = menu_opt+1
        end
    elseif input_type==controller.input.pad then
        local btn = pad.press();
        if btn ~= -1 then
            config_key(curr_key, btn)
            menu_opt = menu_opt+1
        end
    end    
    
    if menu_opt >#input_keys then menu_opt=1 end    
end

function opcions_input_show()
    opcions_input_draw()
    opcions_input_update()
end

function opcions_input_end()
    menu_opt = 0
    states:finish()
end

function config_key(def_key, k)
    local end_setup=false
    local valid_key = true
    
    if (input_type==controller.input.kb and def_key.name=="shoot")
       or (input_type==controller.input.pad and def_key.name=="pause") then
        end_setup = true
    end
    
    if not controller:define(def_key.code, k) then valid_key=false end

    if valid_key then 
        print("DEFINED > "..def_key.name..", "..def_key.code.." = "..k)
        config.key(def_key.code, k)
    else
        print("ERROR AL DEFINIR")
    end
    
    if end_setup then states:next() end
end

states:registrar("opcions_teclat", { opcions_teclat_init, opcions_input_show, opcions_input_end } )
states:registrar("opcions_gamepad", { opcions_gamepad_init, opcions_input_show, opcions_input_end } )