import os
import uuid
from django.utils.deconstruct import deconstructible
from imagekit.processors import ResizeToFill


class ConvertToRGBA(object):
    """Converts an image to RGBA mode."""
    def process(self, img):
        if img.mode not in ('RGBA', 'LA'):
            img = img.convert('RGBA')
        return img


@deconstructible
class UniquePathAndRename(object):
    def __init__(self, upload_to):
        self.upload_to = upload_to

    def __call__(self, instance, filename):
        ext = filename.split('.')[-1]
        new_filename = f"{uuid.uuid4().hex}.{ext}"
        return os.path.join(self.upload_to, new_filename)


def image_optimizer(upload_to, width, height, quality, img_format):
    """
    ProcessedImageField için gerekli olan `upload_to`, `processors`, `format`
    ve `options` parametrelerini dinamik olarak oluşturur.
    """
    processors = [ResizeToFill(width, height)]
    if img_format == 'PNG':
        processors.insert(0, ConvertToRGBA())

    return {
        'upload_to': UniquePathAndRename(upload_to),
        'processors': processors,
        'format': img_format,
        'options': {'quality': quality}
    }
