import os
from functools import lru_cache

from django.core.checks import Warning, register
from willow.image import Image


@lru_cache(maxsize=None)
def has_jpeg_support():
    wagtail_jpg = os.path.join(os.path.dirname(__file__), "check_files", "wagtail.jpg")
    succeeded = True

    with open(wagtail_jpg, "rb") as f:
        try:
            Image.open(f)
        except OSError:
            succeeded = False

    return succeeded


@lru_cache(maxsize=None)
def has_png_support():
    wagtail_png = os.path.join(os.path.dirname(__file__), "check_files", "wagtail.png")
    succeeded = True

    with open(wagtail_png, "rb") as f:
        try:
            Image.open(f)
        except OSError:
            succeeded = False

    return succeeded


@register("files")
def image_library_check(app_configs, **kwargs):
    errors = []

    if not has_jpeg_support():
        errors.append(
            Warning(
                "JPEG image support is not available",
                hint="Check that the 'libjpeg' library is installed, then reinstall Pillow.",
            )
        )

    if not has_png_support():
        errors.append(
            Warning(
                "PNG image support is not available",
                hint="Check that the 'zlib' library is installed, then reinstall Pillow.",
            )
        )

    return errors
