import os

import pytest


def pytest_configure(config):
    """Configure the test environment."""

    if 'USE_QT_API' in os.environ:
        os.environ['QT_API'] = os.environ['USE_QT_API'].lower()

    # We need to import qtpy here to make sure that the API versions get set
    # straight away.
    import qtpy


def pytest_report_header(config):
    """Insert a customized header into the test report."""

    versions = os.linesep
    versions += 'PyQt5: '

    try:
        from PyQt5 import Qt
        versions += f"PyQt: {Qt.PYQT_VERSION_STR} - Qt: {Qt.QT_VERSION_STR}"
    except ImportError:
        versions += 'not installed'
    except AttributeError:
        versions += 'unknown version'

    versions += os.linesep
    versions += 'PySide2: '

    try:
        import PySide2
        from PySide2 import QtCore
        versions += f"PySide: {PySide2.__version__} - Qt: {QtCore.__version__}"
    except ImportError:
        versions += 'not installed'
    except AttributeError:
        versions += 'unknown version'

    versions += os.linesep
    versions += 'PyQt6: '

    try:
        from PyQt6 import QtCore
        versions += \
            f"PyQt: {QtCore.PYQT_VERSION_STR} - Qt: {QtCore.QT_VERSION_STR}"
    except ImportError:
        versions += 'not installed'
    except AttributeError:
        versions += 'unknown version'

    versions += os.linesep
    versions += 'PySide6: '

    try:
        import PySide6
        from PySide6 import QtCore
        versions += f"PySide: {PySide6.__version__} - Qt: {QtCore.__version__}"
    except ImportError:
        versions += 'not installed'
    except AttributeError:
        versions += 'unknown version'

    versions += os.linesep

    return versions


@pytest.fixture
def pdf_writer(qtbot):
    from pathlib import Path
    from qtpy import QtGui
    output_path = Path('test.pdf')
    device = QtGui.QPdfWriter(str(output_path))
    yield device, output_path
    output_path.unlink()
