from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
from PIL import ImageOps


def watermark_text(input_image_path: str,
                   output_image_path: str,
                   font_path: str,
                   text: str,
                   pos: tuple[float, float] = (50, 50),
                   size: int = 40,
                   show: bool = False):
    photo = Image.open(input_image_path)

    # make the image editable
    drawing = ImageDraw.Draw(photo)

    black = (3, 8, 12)
    white = (254, 254, 254)
    yellow = (237,255,33)
    font = ImageFont.truetype(font_path, size, encoding='unic')
    drawing.text(pos, text=text, fill=yellow, font=font, anchor="la")
    photo = ImageOps.exif_transpose(photo)
    if show:
        photo.show()
    photo.save(output_image_path)


def watermark_text_bottom_right(input_image_path: str,
                                output_image_path: str,
                                font_path: str,
                                text: str,
                                pos: tuple[float, float] = (300, 200),
                                size: int = 40):
    photo = Image.open(input_image_path)
    w, h = photo.size
    watermark_text(
        pos=(w-pos[0], h-pos[1]),
        input_image_path=input_image_path,
        output_image_path=output_image_path,
        font_path=font_path,
        text=text,
        size=size)


def watermark_photo(input_image_path,
                    output_image_path,
                    watermark_image_path,
                    pos):
    base_image = Image.open(input_image_path)
    watermark = Image.open(watermark_image_path)

    # add watermark to your image
    base_image.paste(watermark, pos)
    base_image.show()
    base_image.save(output_image_path)


def watermark_with_transparency(input_image_path,
                                output_image_path,
                                watermark_image_path,
                                pos):
    base_image = Image.open(input_image_path)
    watermark = Image.open(watermark_image_path)
    width, height = base_image.size

    transparent = Image.new('RGBA', (width, height), (0,0,0,0))
    transparent.paste(base_image, (0,0))
    transparent.paste(watermark, pos, mask=watermark)
    transparent.show()
    transparent.save(output_image_path)