from p3dsdk import *


def delete_layer_if_empty(layer: GeometryLayer):
    sub_layers = layer.list_child_layers(recursive=False)
    for s in sub_layers:
        delete_layer_if_empty(s)

    have_surfaces = len(layer.list_surfaces()) > 0
    have_sub_layers = len(layer.list_child_layers(recursive=False)) > 0

    # Delete the layer if it contains no surfaces and no sub_layers
    # (they are already deleted if they were empty)
    if not have_surfaces and not have_sub_layers:
        layer.remove(True)


with CurrentP3DSession(fallback_port=33900) as p3d:
    model = p3d.data.list_models()[0]  # Get the first model
    layers = model.list_geometry_layers(recursive=False)
    for layer in layers[1:]:
        delete_layer_if_empty(layer)

    layers_count = len(model.list_geometry_layers(recursive=False))
    # if there is at least one layer not empty, check if the first layer is empty and deletable
    if layers_count > 1:
        delete_layer_if_empty(layers[0])
    else: # delete only the empty sublayers of the remaining layer
        sub_layers = layers[0].list_child_layers(recursive=False)
        for s in sub_layers:
            delete_layer_if_empty(s)

