"""
Copyright (c) Contributors to the Open 3D Engine Project.
For complete copyright and license terms please see the LICENSE at the root of this distribution.

SPDX-License-Identifier: Apache-2.0 OR MIT
"""

def DeleteEntity_UnderLevelPrefab():
    """
    Test description:
    - Creates an entity.
    - Destroys the created entity.
    Checks that the entity is correctly destroyed.
    """

    from editor_python_test_tools.editor_entity_utils import EditorEntity
    from editor_python_test_tools.wait_utils import PrefabWaiter
    import Prefab.tests.PrefabTestUtils as prefab_test_utils

    prefab_test_utils.open_base_tests_level()

    # Creates a new Entity at the root level
    # Asserts if creation didn't succeed
    entity = EditorEntity.create_editor_entity_at((100.0, 100.0, 100.0), name = "TestEntity")
    assert entity.id.IsValid(), "Couldn't create entity"

    level_container_entity = EditorEntity(entity.get_parent_id())
    entity.delete()

    # Wait till prefab propagation finishes before validating entity deletion.
    PrefabWaiter.wait_for_propagation()
    level_container_child_entities_count = len(level_container_entity.get_children_ids())
    assert level_container_child_entities_count == 0, f"The level still has {level_container_child_entities_count}" \
                                                      f" children when it should have 0."

    # Test undo/redo on entity delete
    azlmbr.legacy.general.undo()
    PrefabWaiter.wait_for_propagation()
    level_container_child_entities_count = len(level_container_entity.get_children_ids())
    assert level_container_child_entities_count == 1, f"{level_container_child_entities_count} entities " \
                                                      f"found in level after Undo operation, when there should " \
                                                      f"be 1 entity"
    azlmbr.legacy.general.redo()
    PrefabWaiter.wait_for_propagation()
    level_container_child_entities_count = len(level_container_entity.get_children_ids())
    assert level_container_child_entities_count == 0, f"{level_container_child_entities_count} entities " \
                                                      f"found in level after Redo operation, when there should " \
                                                      f"be 0 entities"


if __name__ == "__main__":
    from editor_python_test_tools.utils import Report
    Report.start_test(DeleteEntity_UnderLevelPrefab)
