import os, sys, io
import M5
from M5 import *
from umqtt import MQTTClient
from hardware import RGB
from hardware import Button



mqtt_client = None
rgb = None
Btn1 = None


def mqtt_fablab_week4_blanco_event(data):
  global mqtt_client, rgb, Btn1
  rgb.set_screen([0, 0, 0, 0, 0, 0, 0xffffff, 0, 0xffffff, 0, 0, 0, 0, 0, 0, 0, 0xffffff, 0xffffff, 0xffffff, 0, 0, 0, 0, 0, 0])


def mqtt_fablab_week4_verde_event(data):
  global mqtt_client, rgb, Btn1
  rgb.set_screen([0, 0, 0, 0, 0, 0, 0x46d133, 0, 0x46d133, 0, 0, 0, 0, 0, 0, 0, 0x46d133, 0x46d133, 0x46d133, 0, 0, 0, 0, 0, 0])


def mqtt_fablab_week4_azul_event(data):
  global mqtt_client, rgb, Btn1
  rgb.set_screen([0, 0, 0, 0, 0, 0, 0x4633d1, 0, 0x4633d1, 0, 0, 0, 0, 0, 0, 0, 0x4633d1, 0x4633d1, 0x4633d1, 0, 0, 0, 0, 0, 0])


def setup():
  global mqtt_client, rgb, Btn1

  M5.begin()
  Widgets.fillScreen(0x000000)

  rgb = RGB()
  rgb.set_screen([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
  rgb.set_brightness(20)
  rgb.set_screen([0, 0, 0, 0, 0, 0, 0xcd3232, 0, 0xcd3232, 0, 0, 0, 0, 0, 0, 0, 0xcd3232, 0xcd3232, 0xcd3232, 0, 0, 0, 0, 0, 0])
  Btn1 = Button(1, active_low=True, pullup_active=False)
  mqtt_client = MQTTClient('oscar', 'xxxxxxxx', port=1883, user='xxxxxxxx', password='xxxxxxxx', keepalive=0)
  mqtt_client.connect(clean_session=True)
  mqtt_client.subscribe('fablab/week4/blanco', mqtt_fablab_week4_blanco_event, qos=0)
  mqtt_client.subscribe('fablab/week4/verde', mqtt_fablab_week4_verde_event, qos=0)
  mqtt_client.subscribe('fablab/week4/azul', mqtt_fablab_week4_azul_event, qos=0)
  if mqtt_client.isconnected():
    rgb.set_screen([0, 0, 0xffffff, 0, 0, 0, 0, 0xffffff, 0, 0, 0, 0, 0xffffff, 0, 0, 0, 0, 0xffffff, 0, 0, 0, 0, 0xffffff, 0, 0])


def loop():
  global mqtt_client, rgb, Btn1
  M5.update()
  mqtt_client.check_msg()


if __name__ == '__main__':
  try:
    setup()
    while True:
      loop()
  except (Exception, KeyboardInterrupt) as e:
    try:
      from utility import print_error_msg
      print_error_msg(e)
    except ImportError:
      print("please update to latest firmware")
