import os, sys, io
import M5
from M5 import *
import m5ui
import lvgl as lv
from unit import UHFRFIDUnit
import time



page0 = None
label0 = None
button0 = None
switch0 = None
uhfrfid_0 = None


epc = None
code16 = None

# Describe this function...
def inventory1():
  global epc, code16, page0, label0, button0, switch0, uhfrfid_0
  epc = uhfrfid_0.inventory()
  Speaker.tone(2000, 50)
  if len(epc) >= 16:
    code16 = epc[-16 : ]
  else:
    code16 = '---'
  label0.set_text(str(code16))
  label0.align_to(page0, lv.ALIGN.CENTER, 0, 0)


def button0_short_clicked_event(event_struct):
  global page0, label0, button0, switch0, uhfrfid_0, epc, code16
  inventory1()


def button0_event_handler(event_struct):
  global page0, label0, button0, switch0, uhfrfid_0, epc, code16
  event = event_struct.code
  if event == lv.EVENT.SHORT_CLICKED and True:
    button0_short_clicked_event(event_struct)
  return

def setup():
  global page0, label0, button0, switch0, uhfrfid_0, epc, code16

  M5.begin()
  Widgets.setRotation(1)
  m5ui.init()
  page0 = m5ui.M5Page(bg_c=0xe3daa4)
  label0 = m5ui.M5Label("Hello World", x=88, y=105, text_c=0x000000, bg_c=0xffffff, bg_opa=0, font=lv.font_montserrat_24, parent=page0)
  button0 = m5ui.M5Button(text="Scan", x=125, y=191, bg_c=0x2196f3, text_c=0xffffff, font=lv.font_montserrat_16, parent=page0)
  switch0 = m5ui.M5Switch(x=127, y=5, w=60, h=30, bg_c=0xe7e3e7, bg_c_checked=0x2196f3, circle_c=0xffffff, parent=page0)

  button0.add_event_cb(button0_event_handler, lv.EVENT.ALL, None)

  uhfrfid_0 = UHFRFIDUnit(2, port=(33, 32), verbose=True)
  uhfrfid_0.set_working_region(UHFRFIDUnit.EUR)
  uhfrfid_0.set_tx_power(26)
  page0.screen_load()


def loop():
  global page0, label0, button0, switch0, uhfrfid_0, epc, code16
  M5.update()
  if switch0.has_state(lv.STATE.CHECKED):
    inventory1()
    time.sleep_ms(500)


if __name__ == '__main__':
  try:
    setup()
    while True:
      loop()
  except (Exception, KeyboardInterrupt) as e:
    try:
      m5ui.deinit()
      from utility import print_error_msg
      print_error_msg(e)
    except ImportError:
      print("please update to latest firmware")
