import gc
import os
from pathlib import Path
import sys

import pytest

# edited by glg
os.environ.setdefault("QT_QPA_PLATFORM", "offscreen")


PROJECT_ROOT = Path(__file__).resolve().parents[1]
if str(PROJECT_ROOT) not in sys.path:
    sys.path.insert(0, str(PROJECT_ROOT))


# edited by glg
# Isolasi lifecycle Qt antar test untuk mengurangi crash native pada urutan suite panjang.
@pytest.fixture(autouse=True)
def _qt_test_cleanup():
    yield
    try:
        from PySide6.QtWidgets import QApplication
    except ImportError:
        gc.collect()
        return

    app = QApplication.instance()
    if app is None:
        gc.collect()
        return
    if not hasattr(app, "topLevelWidgets"):
        try:
            app.processEvents()
        except RuntimeError:
            pass
        gc.collect()
        return

    for widget in list(app.topLevelWidgets() or []):
        try:
            widget.close()
        except RuntimeError:
            pass
        try:
            widget.deleteLater()
        except RuntimeError:
            pass
    try:
        app.processEvents()
    except RuntimeError:
        pass
    gc.collect()
