local lvgl = require("lvgl")

local backstack = {
  root = lvgl.Object(nil, {
    w = lvgl.HOR_RES(),
    h = lvgl.VER_RES(),
  }),
  stack = {},
}

function backstack:Top()
  return self.stack[#self.stack]
end

function backstack:SetTopParent(parent)
  local top = self:Top()
  if top and top.root then
    top.root:set_parent(parent)
  end
end

function backstack:Push(screen)
  self:SetTopParent(nil)
  table.insert(self.stack, screen)
  self:SetTopParent(self.root)
end

function backstack:Pop(num)
  num = num or 1
  for _ = 1, num do
    local removed = table.remove(self.stack)
    removed.root:delete()
  end
  self:SetTopParent(self.root)
end

return backstack