#!/usr/bin/python
# -*- coding:utf-8 -*-
import sys
import os
picdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'pic')
libdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'lib')
if os.path.exists(libdir):
    sys.path.append(libdir)

import logging
from waveshare_epd import epd2in13bc
import time
from PIL import Image,ImageDraw,ImageFont
import traceback
from paho.mqtt import client as mqtt_client

logging.basicConfig(level=logging.DEBUG)

broker = 'homeassistant'
port = 8883
topic = "openWB/evu/W"
username = "mqtt-user"
password = "phio6yiR9ohs1veeghu4WaeGhaiRi8he4EiWasheev4faeku8tohdiuthah7zahP"
client_id = "solarmonitor"

def connect_mqtt() -> mqtt_client:
    def on_connect(client, userdata, flags, rc):
        if rc == 0:
            print("Connected to MQTT Broker!")
        else:
            print("Failed to connect, return code %d\n", rc)

    client = mqtt_client.Client(client_id)
    client.username_pw_set(username, password)
    client.on_connect = on_connect
    client.connect(broker, port)
    return client

def subscribe(client: mqtt_client):
    def on_message(client, userdata, msg):
        logging.info("epd2in13bc Demo")
    
        epd = epd2in13bc.EPD()
        logging.info("init and Clear")
        epd.init()
        epd.Clear()
        time.sleep(1)
        
        # Drawing on the image
        logging.info("Drawing")    
        font20 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 20)
        font18 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 18)
        
        # Drawing on the Horizontal image
        logging.info("1.Drawing on the Horizontal image...") 
        HBlackimage = Image.new('1', (epd.height, epd.width), 255)  # 298*126
        HRYimage = Image.new('1', (epd.height, epd.width), 255)  # 298*126  ryimage: red or yellow image  
        drawblack = ImageDraw.Draw(HBlackimage)
        drawry = ImageDraw.Draw(HRYimage)
        drawblack.text((10, 0), msg.payload.decode(), font = font20, fill = 0)
        epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRYimage))
        time.sleep(2)


        logging.info("4.read bmp file on window")
        blackimage1 = Image.new('1', (epd.height, epd.width), 255)  # 298*126
        redimage1 = Image.new('1', (epd.height, epd.width), 255)  # 298*126    
        newimage = Image.open(os.path.join(picdir, 'elektrizitat.bmp'))
        blackimage1.paste(newimage, (10,10))    
        epd.display(epd.getbuffer(blackimage1), epd.getbuffer(redimage1))
        
        logging.info("Clear...")
        epd.init()
        epd.Clear()
        
        logging.info("Goto Sleep...")
        epd.sleep()
    
        print(f"Received `{msg.payload.decode()}` from `{msg.topic}` topic")

    client.subscribe(topic)
    client.on_message = on_message


def run():
    client = connect_mqtt()
    subscribe(client)
    client.loop_forever()


if __name__ == '__main__':
    run()



