local jecs = require("@jecs")
local world = jecs.World.new()

local Model = world:component()

-- It is important to define hooks for the component before the component is ever used
-- otherwise the hooks will never invoke!
world:set(Model, jecs.OnRemove, function(entity)
	-- OnRemove is invoked before the component and its value is removed
	-- which provides a stable reference to the entity at deletion.
	-- This means that it is safe to retrieve the data inside of a hook
	local model = world:get(entity, Model)
	model:Destroy()
end)

world:set(Model, jecs.OnSet, function(entity, model)
	-- OnSet is invoked after the data has been assigned.
	-- It also returns the data for faster access.
	-- There may be some logic to do some side effects on reassignments
	model:SetAttribute("entityId", entity)
end)
