-- biters explode --  by mewmew

local Event = require 'utils.event'

local biter_values = {
    ['medium-biter'] = {'blood-explosion-big', 20, 1.5},
    ['big-biter'] = {'blood-explosion-huge', 40, 2},
    ['behemoth-biter'] = {'blood-explosion-huge', 60, 2.5}
}

local function damage_entities_in_radius(surface, position, radius, damage)
    local entities_to_damage = surface.find_entities_filtered({area = {{position.x - radius, position.y - radius}, {position.x + radius, position.y + radius}}})
    for _, entity in pairs(entities_to_damage) do
        if entity.health and entity.name ~= 'land-mine' then
            if entity.force.name ~= 'enemy' then
                if entity.name == 'character' then
                    entity.damage(damage, 'enemy')
                else
                    entity.health = entity.health - damage
                    if entity.health <= 0 then
                        entity.die('enemy')
                    end
                end
            end
        end
    end
end

local function on_entity_died(event)
    if not event.entity.valid then
        return
    end
    if biter_values[event.entity.name] then
        local entity = event.entity
        entity.surface.create_entity({name = biter_values[entity.name][1], position = entity.position})
        damage_entities_in_radius(
            entity.surface,
            entity.position,
            biter_values[entity.name][3],
            math.random(math.ceil(biter_values[entity.name][2] * 0.75), math.ceil(biter_values[entity.name][2] * 1.25))
        )
    end
end

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