local Event = require 'utils.event'

local function on_tick()
    if storage.map_pregeneration_is_active then
        if game.tick % 600 == 0 then
            local r = 1
            for x = 1, storage.chunk_radius, 1 do
                if game.forces.map_pregen.is_chunk_charted(game.players[1].surface, { x, x }) then
                    r = x
                end
            end
            game.print('Map chunks are generating... current radius ' .. r, { r = 0.22, g = 0.99, b = 0.99 })
            if game.forces.map_pregen.is_chunk_charted(game.players[1].surface, { storage.chunk_radius, storage.chunk_radius }) then
                game.print('Map generation done!', { r = 0.22, g = 0.99, b = 0.99 })

                game.players[1].force = game.forces['player']
                storage.map_pregeneration_is_active = nil
            end
        end
    end
end

local function map_pregen(chunk_radius)
    if chunk_radius then
        storage.chunk_radius = chunk_radius
    else
        storage.chunk_radius = 32
    end
    local radius = storage.chunk_radius * 32
    if not game.forces.map_pregen then
        game.create_force('map_pregen')
    end
    game.players[1].force = game.forces['map_pregen']
    game.forces.map_pregen.chart(game.players[1].surface, { { x = -1 * radius, y = -1 * radius }, { x = radius, y = radius } })
    storage.map_pregeneration_is_active = true
end

Event.add(defines.events.on_tick, on_tick)

return map_pregen
