from __future__ import annotations

from PIL import Image

from .helper import hopper


def test_extrema() -> None:
    def extrema(mode: str) -> tuple[float, float] | tuple[tuple[int, int], ...]:
        return hopper(mode).getextrema()

    assert extrema("1") == (0, 255)
    assert extrema("L") == (1, 255)
    assert extrema("I") == (1, 255)
    assert extrema("F") == (1, 255)
    assert extrema("P") == (0, 225)  # fixed palette
    assert extrema("RGB") == ((0, 255), (0, 255), (0, 255))
    assert extrema("RGBA") == ((0, 255), (0, 255), (0, 255), (255, 255))
    assert extrema("CMYK") == ((0, 255), (0, 255), (0, 255), (0, 0))
    assert extrema("I;16") == (1, 255)


def test_true_16() -> None:
    with Image.open("Tests/images/16_bit_noise.tif") as im:
        assert im.mode == "I;16"
        extrema = im.getextrema()
    assert extrema == (106, 285)
