class Lookbook::Collection

def as_tree(filter_hidden: true)

def as_tree(filter_hidden: true)
  return self if hierarchy_depth > 0
  return @tree if @tree.present?
  @tree = self.class.new
  candidates = filter_hidden ? visible_items : items
  candidates.each do |item|
    current = @tree
    if item.hierarchy_depth == 1
      current.add(item)
    else
      item.parent_collections_names.each.with_index(1) do |name, i|
        target = current.get_or_create(name)
        if item.hierarchy_depth == i + 1
          target.add(item)
        else
          current = target
        end
      end
    end
  end
  @tree
end