#!/usr/bin/env python3

import cv2
from PIL import Image, ImageDraw, ImageFont

print(cv2.__version__)

gst_str = ('v4l2src device=/dev/video0 ! '
          'videoconvert ! appsink drop=true max-buffers=1 sync=false')
print(gst_str)

logo_im = Image.open('smallshepherd.png')

overlayfont = "DejaVuSansMono.ttf"

try:
    fnt = ImageFont.truetype(overlayfont, 50)
except IOError:
    fnt = ImageFont.load_default()

loaded_fonts={}
loaded_logos={}

vidcap = cv2.VideoCapture(gst_str, cv2.CAP_GSTREAMER)
while True:
    breakpoint()
    vidcap.grab()
    read_flag, frame = vidcap.read()
    print(read_flag)
    #overlay = frame.copy()
    # You may need to convert the color.

    #Convert over to PIL. Mostly so we can use our own font.
    img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    im_pil = Image.fromarray(img)

    font_size = int(im_pil.height/40)
    margin_size = int(font_size/5)

    if font_size not in loaded_fonts:
        loaded_fonts[font_size] = ImageFont.truetype(overlayfont, int(font_size*0.9))

    thisfont = loaded_fonts[font_size]

    if font_size not in loaded_logos:
        newsize = (int(logo_im.width*(font_size/logo_im.height)),font_size)
        loaded_logos[font_size] = logo_im.resize(newsize, Image.BILINEAR)

    thislogo = loaded_logos[font_size]
    

    overlay = Image.new('RGBA',(im_pil.width,font_size+(2*margin_size)), (0,0,0))
    
    overlay.paste(thislogo, (int((overlay.width-thislogo.width)/2),margin_size))

    draw = ImageDraw.Draw(overlay)
    draw.text((margin_size*2, margin_size), "SARDIcam-1", font=thisfont,
                  fill=(255, 255, 255, 255))

    datetext = "2019-07-24 20:22:31"
    datewidth, _ = draw.textsize(datetext,thisfont)
    draw.text((overlay.width-(margin_size*2)-datewidth, margin_size), datetext, font=thisfont,
                  fill=(255, 255, 255, 255))

    overlay.putalpha(128)

    im_pil.paste(overlay, (0,im_pil.height-overlay.height),overlay)
    im_pil.save("test.jpg", "JPEG", quality=90)

    

    # For reversing the operation:
    #im_np = np.asarray(im_pil)

    #cv2.rectangle(overlay,(200,200),(500,500),(255,0,0),-1)
    #cv2.addWeighted(overlay, 0.3, frame, 0.7, 0, frame)
    #cv2.imwrite("frame.jpg", frame)

# print out build properties:
# print(cv2.getBuildInformation())