#include <logger.h>
#include <handlers.h>
#include <connections.h>
#include <models/controller.h>

void
handler_mqtt(struct mg_connection *nc, int ev, void *p) {
    struct mg_mqtt_message *msg = (struct mg_mqtt_message *) p;
    (void) nc;

    switch (ev)
    {
        case MG_EV_CONNECT:
            {
                struct mg_send_mqtt_handshake_opts opts;
                memset(&opts, 0, sizeof(opts));
                // TODO add password

                mg_set_protocol_mqtt(nc);
                mg_send_mqtt_handshake_opt(nc, global_controller->name, opts);
                break;
            }
        case MG_EV_MQTT_CONNACK:
            if(msg->connack_ret_code != MG_EV_MQTT_CONNACK_ACCEPTED)
            {
                LOG_INFO("Got MQTT connection error: %d\n", msg->connack_ret_code);
                break;
            }
            if(!global_connection_mqtt)
            {
                LOG_DEBUG("connected to MQTT server\n");
                global_connection_mqtt = nc;
            }
            break;
        case MG_EV_CLOSE:
            if(global_connection_mqtt)
            {
                LOG_DEBUG("disconnected from MQTT server\n");
            }
            global_connection_mqtt = NULL;
            break;
    }
}