INVENTORY = "INVENTORY";
OPTIONS = "OPTIONS";
GLOBAL = "GLOBAL"
HINT = "HINT"
FOUND_OBJECTS = "FOUND_OBJECTS"

gSaveTable = {}

function SaveAllStates()
    save_table(CURRENT_SCREEN, CurrentScreen.states)
    save_table(GLOBAL, DefaultScreen.states)
    save_table(INVENTORY, clInventory.states)
end

function LoadAllStates()
    CurrentScreen.states = load_table(CURRENT_SCREEN)
    DefaultScreen.states = load_table(GLOBAL)
    clInventory.states = load_table(INVENTORY)
end

function LoadGlobalStates()
    DefaultScreen.states = {}--load_table(GLOBAL)
end

function SaveGlobalStates()
    save_table(GLOBAL, DefaultScreen.states)
end

function save_table(global_key, states_table)    
    for key, value in pairs(states_table) do 
        if(type(value) == "number") then --числа
            SetState(global_key, tostring(key), "_n#"..tostring(value))
        elseif(type(value) == "string") then --строки
            SetState(global_key, tostring(key), "_s#"..value)
        elseif(type(value) == "boolean")then --булены
            SetState(global_key, tostring(key), "_b#"..tostring(value))
        elseif(type(value) == "table")then -- правильный!!! массив однотипных значений(только булены, только строки или только цифры)
            SetState(global_key, tostring(key), "")
            local need_type = type(value[1])
            if(need_type) then
                if(need_type == "number") then
                    SetState(global_key, tostring(key), "na#") 
                elseif(need_type == "string") then
                    SetState(global_key, tostring(key), "sa#") 
                elseif(need_type == "boolean") then
                    SetState(global_key, tostring(key), "ba#") 
                end
                
                for sub_key, sub_value in pairs(value) do
                    if(type(sub_value) == need_type) then
                        SetState(global_key, tostring(key), GetState(global_key, tostring(key)).." "..tostring(sub_value))
                    else
                        --TODO: это ошибка при составлении таблицы стейтов.. может запороть сейв
                    end    
                end
            else
                --TODO: это ошибка при составлении таблицы стейтов.. может запороть сейв
            end
        end
    end
end

function load_table(global_key)
   --[[ states_table = {}
    
    GetStateTable(global_key)
    
    for key, value in pairs(gSaveTable) do
        local type = value:sub(1, 2);
        local state_value = value:sub(4, value:len());
        
        if(type == "_n") then
            states_table[key] = tonumber(state_value)
        elseif(type == "_s") then
            states_table[key] = state_value
        elseif(type == "_b") then
             states_table[key] = toboolean(state_value)
        elseif(type == "na") then
            states_table[key] = {}
            for num in string.gmatch(state_value, "[_%a%d]+") do
                table.insert(states_table[key], tonumber(num))
            end
        elseif(type == "sa") then
            states_table[key] = {}
            for str in string.gmatch(state_value, "[_%a%d]+") do
                table.insert(states_table[key], str)
            end
        elseif(type == "ba") then
            states_table[key] = {}
            for bool in string.gmatch(state_value, "[_%a%d]+") do
                table.insert(states_table[key], bool)
            end
        end
    end
    
    gSaveTable = {}
    
    return states_table;--]]
end

function toboolean(str)
    if(str == "true")then
        return true
    elseif(str == "false")then
        return false
    else
        return nil
    end
end