#!/usr/bin python3
# -*- coding: utf-8 -*-
"""
This script is created to test the different fonts installed. It may return error if some of them are missing.
"""
import datetime as dt
import json
import os
import sys

from PIL import Image,ImageDraw,ImageFont


def main():
    # Basic configuration settings (user replaceable)
    # config.json is in the root folder
    configFile = open(os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'config.json'))
    config = json.load(configFile)


    isDisplayConected = config['isDisplayConected']  # set to true when debugging rendering without displaying to screen
    screenWidth = config['screenWidth']  # Width of E-Ink display. Default is landscape. Need to rotate image to fit.
    screenHeight = config['screenHeight']  # Height of E-Ink display. Default is landscape. Need to rotate image to fit.
    imageWidth = config['imageWidth']  # Width of image to be generated for display.
    imageHeight = config['imageHeight'] # Height of image to be generated for display.
    rotateAngle = config['rotateAngle']  # If image is rendered in portrait orientation, angle to rotate to fit screen
    hourFormat = config['hourFormat'] # The format the hour will be displayed. eg. 13:02 or 01:02 PM

    # Set the hour, this is important to see what time the e-Paper has been syncronized
    if hourFormat == "12h":
        time = dt.datetime.now().strftime("%I:%M %p")   
    else:
        time = dt.datetime.now().strftime("%H:%M")


    assets = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'assets')
    fontsdir = os.path.join(assets, 'fonts')
    # Drawing on the image
    font15 = ImageFont.truetype(os.path.join(fontsdir, 'wavesharefont.ttc'), 15)
    font24 = ImageFont.truetype(os.path.join(fontsdir, 'wavesharefont.ttc'), 24)

    # pixel_operator fonts
    font8 = ImageFont.truetype(os.path.join(os.path.join(fontsdir, 'pixel_operator'), 'PixelOperator8.ttf'), 8)
    font8_bold = ImageFont.truetype(os.path.join(os.path.join(fontsdir, 'pixel_operator'), 'PixelOperator8-Bold.ttf'), 8)
    font16 = ImageFont.truetype(os.path.join(os.path.join(fontsdir, 'pixel_operator'), 'PixelOperator.ttf'), 16)
    font16_bold = ImageFont.truetype(os.path.join(os.path.join(fontsdir, 'pixel_operator'), 'PixelOperator-Bold.ttf'), 16)

    # Better VCR font
    font16_2 = ImageFont.truetype(os.path.join(fontsdir, 'Better VCR 9.0.1.ttf'), 16)
    font8_2 = ImageFont.truetype(os.path.join(fontsdir, 'Better VCR 9.0.1.ttf'), 12)


    image = Image.new('1', (imageWidth, imageHeight), 255)  # 255: clear the frame    
    draw = ImageDraw.Draw(image)

    fonts8 = [font8, font8_bold, font8_2]
    fonts16 = [font16, font16_bold, font16_2]
    y = 0
    for font in fonts8:
        draw.text((0, y), f"Lore Ipso sum {time}", font = font, fill = 0) # draw the current time in the top left corner
        y += 12
        if y >= screenHeight:
            break
        
    for font in fonts16:
        draw.text((0, y), f"Lore Ipso sum {time}", font = font, fill = 0) # draw the current time in the top left corner
        y += 16
        if y >= screenHeight:
            break

    image.save(os.path.join(assets, 'test-fonts.bmp'))


    if isDisplayConected:
        # This line is necesary to be able to acceass the modules from this folder
        # We are basically adding the root folder of the proyect to the path
        sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))
        from display.display import DisplayHelper

        displayService = DisplayHelper(screenWidth, screenHeight)
        displayService.update(image.rotate(rotateAngle))
        displayService.clear()
        displayService.sleep()  # go to sleep


if __name__ == "__main__":
    main()
