import json,subprocess,sys
from pathlib import Path
from PIL import Image,ImageDraw,ImageFont
folder=Path(__file__).parent
font=ImageFont.truetype('/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf',19)
for side in sys.argv[1:] or ['base','head']:
    events=[json.loads(x) for x in (folder/(side+'.cast')).read_text().splitlines()[1:]]
    out=folder/(side+'.mp4')
    encoder=subprocess.Popen(['ffmpeg','-y','-loglevel','error','-f','rawvideo','-pixel_format','rgb24','-video_size','1400x650','-framerate','4','-i','-','-c:v','libx264','-pix_fmt','yuv420p',str(out)],stdin=subprocess.PIPE)
    for frame in range(int((events[-1][0]+3)*4)):
        elapsed=frame/4
        lines=[]
        for t,_,text in events:
            if t<=elapsed: lines.extend(text.replace('\r','').rstrip('\n').split('\n'))
        image=Image.new('RGB',(1400,650),'#10151c')
        draw=ImageDraw.Draw(image)
        draw.text((28,20),'LIVE COMMAND OUTPUT RECORDING  /  '+('BEFORE' if side=='base' else 'AFTER')+'  /  %.2fs'%elapsed,font=font,fill='#80d6cf')
        draw.multiline_text((28,70),'\n'.join(lines),font=font,fill='#edf0f4',spacing=10)
        encoder.stdin.write(image.tobytes())
    image.save(folder/(side+'.png'))
    encoder.stdin.close();encoder.wait()
