#!/usr/bin/env python3
#-*- coding: utf-8 -*-

    
    
import queue
import threading

import gpiozero
import paho.mqtt.client as mqtt

GPIO_BUTTON = 12

HOST = "192.168.1.200"
PORT = 1883

mqttc = mqtt.Client()
mqttc.connect(HOST, PORT, keepalive=60)
mqttc.loop_start()

mqttc.publish("tutorial/A/BUTTON", "ON")


msgQueue = queue.Queue()

class Publish:
    def __init__(self):
        self.runIt = True
        self.t = threading.Thread(target=self.run)
        self.t.start()
        
    def run(self):
        while self.runIt:
            try:
                msg = msgQueue.get(timeout=0.1)
            except queue.Empty:
                continue
            mqttc.publish("tutorial/A/button", msg)
            
    def close(self):
        self.runIt = False
        self.t.join()

class Button:
    def __init__(self, gpio):
        self.gpio = gpio
        self.button = gpiozero.Button(gpio)
        
        self.button.when_pressed = self._pressed
        self.button.when_released = self._released
            
    def _pressed(self):
        msgQueue.put("ON")

    def _released(self):
        msgQueue.put("OFF")
        
    def stop(self):
        pass    
 
if __name__ == "__main__":        
    
    
    publish = Publish()
    button = Button(GPIO_BUTTON)
    
    wait = threading.Event()
    try:
        wait.wait()
    except KeyboardInterrupt:
        pass
    
    button.close()
    publish.close()
            
    mqttc.loop_stop()
    mqttc.disconnect()
    
    print("finished")
