from io import BytesIO
from PIL.PngImagePlugin import PngImageFile
from PIL.JpegImagePlugin import JpegImageFile
from typing import Union, List

ImageLike = Union[PngImageFile, JpegImageFile]

def resize_image(image: ImageLike, width: int, height: int) -> bytes:
    """resize image to the given width and height

    Args:
        image (ImageLike): input image to resize of type PngImageFile or JpegImageFile
        width (int): expected width of the image
        height (int): expected height of the image

    Returns:
        bytes: a new image with the given width and height in PNG format
    """
    image = image.resize((width, height))
    bytes_stream = BytesIO()
    image.save(bytes_stream, format='PNG')
    return bytes_stream.getvalue()


def get_width_height(size: str) -> List:
    """get width and height of the image from the given size as a string, for example - 
        size = '512x512' 

    Args:
        size (str): size described as '_width_x_height_' example '512x512'

    Returns:
        List: returns a list of interger as [width, height] extracted from the 
        given size
    """
    # size = '512x512'
    return [int(val) for val in size.split("x")] # [512, 512]