-- Communicates current population to mountainhomes to avoid cap overshooting.

--[[=begin

fix/population-cap
==================
Run this after every migrant wave to ensure your population cap is not exceeded.

The reason for population cap problems is that the population value it
is compared against comes from the last dwarven caravan that successfully
left for mountainhomes. This script instantly updates it.
Note that a migration wave can still overshoot the limit by 1-2 dwarves because
of the last migrant bringing his family. Likewise, king arrival ignores cap.

=end]]
local args = {...}

local ui = df.global.ui
local ui_stats = ui.tasks
local civ = df.historical_entity.find(ui.civ_id)

if not civ then
    qerror('No active fortress.')
end

local civ_stats = civ.activity_stats

if not civ_stats then
    if args[1] ~= 'force' then
        qerror('No caravan report object; use "fix/population-cap force" to create one')
    end
    print('Creating an empty statistics structure...')
    civ.activity_stats = {
        new = true,
        created_weapons = { resize = #ui_stats.created_weapons },
        discovered_creature_foods = { resize = #ui_stats.discovered_creature_foods },
        discovered_creatures = { resize = #ui_stats.discovered_creatures },
        discovered_plant_foods = { resize = #ui_stats.discovered_plant_foods },
        discovered_plants = { resize = #ui_stats.discovered_plants },
    }
    civ_stats = civ.activity_stats
end

-- Use max to keep at least some of the original caravan communication idea
civ_stats.population = math.max(civ_stats.population, ui_stats.population)

print('Home civ notified about current population.')