import os
import shutil


def pytest_runtest_teardown(item, nextitem):
    """
    Teardown method to clean up folder creations during testing. This method is called after each test, but performs
    deletions only after an entire test class was executed.
    :param item: tested item
    :param nextitem: next item (could be None, if no following test is available)
    """
    if nextitem is None or item.cls != nextitem.cls:
        # clean up all TestExperiment and data folder that have been created during testing
        rel_path = os.path.relpath(item.fspath.dirname, os.path.abspath(__file__))
        path = os.path.dirname(__file__)
        for stage in filter(None, rel_path.replace("..", ".").split("/")):
            path = os.path.abspath(os.path.join(path, stage))
            list_dir = os.listdir(path)
            if "data" in list_dir and path != os.path.dirname(__file__):  # do not delete data folder in src
                shutil.rmtree(os.path.join(path, "data"), ignore_errors=True)
            if "TestExperiment" in list_dir:
                shutil.rmtree(os.path.join(path, "TestExperiment"), ignore_errors=True)
    else:
        pass  # nothing to do if next test is from same test class