from __future__ import annotations

import warnings

import pytest

from PIL import Image

with warnings.catch_warnings(action="ignore", category=DeprecationWarning):
    from PIL import ImageQt

from .helper import assert_image_equal, hopper

pytestmark = pytest.mark.skipif(
    not ImageQt.qt_is_installed, reason="Qt bindings are not installed"
)

ims: list[Image.Image] = []


def setup_module() -> None:
    ims.append(hopper())
    ims.append(Image.open("Tests/images/transparent.png"))
    ims.append(Image.open("Tests/images/7x13.png"))


def teardown_module() -> None:
    for im in ims:
        im.close()


def roundtrip(expected: Image.Image) -> None:
    # PIL -> Qt
    intermediate = expected.toqimage()
    # Qt -> PIL
    result = ImageQt.fromqimage(intermediate)

    if intermediate.hasAlphaChannel():
        assert_image_equal(result, expected.convert("RGBA"))
    else:
        assert_image_equal(result, expected.convert("RGB"))


def test_sanity_1() -> None:
    for im in ims:
        roundtrip(im.convert("1"))


def test_sanity_rgb() -> None:
    for im in ims:
        roundtrip(im.convert("RGB"))


def test_sanity_rgba() -> None:
    for im in ims:
        roundtrip(im.convert("RGBA"))


def test_sanity_l() -> None:
    for im in ims:
        roundtrip(im.convert("L"))


def test_sanity_p() -> None:
    for im in ims:
        roundtrip(im.convert("P"))
