#ifndef ALARM_DB_H
#define ALARM_DB_H
#include <mosquitto.h>
#include <time.h>

#define CREATE_ALARM_HISTORY_DB "CREATE DATABASE IF NOT EXISTS BmsAlarm;"
#define BMSER_DB_NAME "BmsAlarm"
#define BMSER_TAB_NAME "bmserAlarm"
#define BMSER_ALARM_DB_PATH "/app/database/bmsalarm.db"

#define TDENGINE_CREATE_BMSER_ALARM_TAB_SQL "CREATE TABLE IF NOT EXISTS bmserAlarm (" \
                                            "raise_time        TIMESTAMP, "             \
                                            "entity            VARCHAR(64),"            \
                                            "addition          VARCHAR(1024));"

#define SQLITE_CREATE_ALARM_TAB_SQL "CREATE TABLE IF NOT EXISTS bmserAlarm (" \
                                    "raise_time        BIGINT UNSIGNED, "       \
                                    "entity            TEXT(64),"               \
                                    "frame             TEXT(1024));"

#define INSERT_BMSER_ALARM_SQL "INSERT INTO bmserAlarm VALUES(%" PRIu64 ", '%s', '%s');"

#define GET_BMSER_ALARM_HISTORY "SELECT * FROM bmserAlarm WHERE entity = '%s'" \
                                "ORDER BY raise_time DESC "                   \
                                "LIMIT %d OFFSET %d;"

#define BMSER_MAX_ALARM_CNT (10000 - 2) 
#define TAOS_GET_DEL_BMSER_HISTORY_TIME "SELECT raise_time FROM bmserAlarm ORDER BY raise_time DESC LIMIT 1 OFFSET %d;"
#define TAOS_DEL_BMSER_HISTORY_SQL "DELETE FROM bmserAlarm WHERE raise_time < %"PRIu64";"

#define DELETE_BMSER_ALARM_HISTORY_SQL "DELETE FROM bmserAlarm WHERE raise_time NOT IN (SELECT raise_time FROM bmserAlarm ORDER BY raise_time DESC LIMIT %d);"


#define ALARM_HISTORY_NUM_GET "SELECT COUNT(*) FROM bmserAlarm WHERE entity = '%s';"

#define BMSER_MQTT_HOST "localhost"
#define BMSER_MQTT_PORT 1883
#define BMSER_MQTT_USER ""
#define BMSER_MQTT_PASS ""

#define BMSER_MQTT_KEEP_ALIVE_MAX  1000
#define BMSER_MQTT_IPC_QOS 1


typedef struct bmser_alarm_t
{
    time_t raise_time;
    char entity[64];
    char* frame;
} bmser_alarm_t;

typedef struct bmser_alarm_control_t
{
    struct mosquitto* mqtt;
    void*             db;
} bmser_alarm_control_t;


int bmser_alarm_control_start(void);

#endif // ALARM_DB_H
