/*
* @fileName bmser_alarm.h
* @author gaoyang
* @date 2025-05-21 09:32
* @description 
*/
#ifndef _BMSER_ALARM_H
#define _BMSER_ALARM_H
#include "mqtt_session.h"
#include "lnxall_buffer.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
#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
{
    mqtt_session_t *mqtt;
    void*           db;
} bmser_alarm_control_t;


int get_bmser_alarm_buf(struct lnxall_buff* buf, char* entity, int page, int page_size);

#endif
