import config
import function
import json
import mqtt
import os
import report
import subprocess
import time

logger = report.default_logging_config()


VERS_MAJOR = 1
VERS_MINOR = 4
VERS_PATCH = 3

INFO_TOPIC = "__info__"
INFO_DATA = {
    "app_name": os.path.splitext(os.path.basename(__file__))[0],
    "version": {
        "readable": "%d.%d.%d" % (VERS_MAJOR, VERS_MINOR, VERS_PATCH),
        "major": VERS_MAJOR,
        "minor": VERS_MINOR,
        "patch": VERS_PATCH
    },
    "git": {
        "url": subprocess.check_output(["git", "config", "--get",  "remote.origin.url"])[:-1].decode("utf-8"),
        "ref": subprocess.check_output(["git", "log", "-1", '--format="%H"'])[1:-2].decode("utf-8")
    }
}


def __info_publisher__(client, userdata, message):
    data = json.loads(message.payload)
    if data != INFO_DATA:
        client.publish(INFO_TOPIC, json.dumps(INFO_DATA))


if __name__ == "__main__":
    #
    # MQTT Client
    #
    mc = mqtt.mqtt_client(host=config.MQTT_SERVER, port=config.MQTT_PORT, username=config.MQTT_USER,
                          password=config.MQTT_PASSWORD, name=config.APP_NAME)
    mc.add_callback(INFO_TOPIC, __info_publisher__)

    #
    # Smart Home Functionality
    #
    func = function.all_functions(mc)

    while (func.run):
        time.sleep(1)
