#ifndef OFFLINE_STORAGE_H
#define OFFLINE_STORAGE_H

#include <stdbool.h>
#include <stdint.h>
#include "esp_err.h"

// 数据类型
typedef enum {
    OFFLINE_DATA_TYPE_UNKNOWN = 0,
    OFFLINE_DATA_TYPE_MODBUS = 1,     // MODBUS采集数据
    OFFLINE_DATA_TYPE_DEVICE_STATUS = 2,  // 设备状态数据
} offline_data_type_t;

/**
 * @brief 初始化离线存储模块
 *
 * @return ESP_OK 成功
 *         其他 失败
 */
esp_err_t offline_storage_init(void);

/**
 * @brief 存储离线数据
 *
 * @param data 数据内容（JSON字符串）
 * @param length 数据长度
 * @param data_type 数据类型
 * @return ESP_OK 成功
 *         ESP_FAIL 失败
 */
esp_err_t offline_storage_store(const char *data, size_t length, offline_data_type_t data_type);

/**
 * @brief 读取最旧的离线数据
 *
 * @param buffer 输出缓冲区
 * @param max_len 缓冲区最大长度
 * @param out_data_type 输出数据类型
 * @return ESP_OK 成功
 *         ESP_ERR_NOT_FOUND 没有数据
 *         其他 失败
 */
esp_err_t offline_storage_read_oldest(char *buffer, size_t max_len, offline_data_type_t *out_data_type);

/**
 * @brief 删除最旧的离线数据
 *
 * @return ESP_OK 成功
 *         ESP_ERR_NOT_FOUND 没有数据
 *         其他 失败
 */
esp_err_t offline_storage_delete_oldest(void);

/**
 * @brief 获取离线数据数量
 *
 * @return 数据数量
 */
uint32_t offline_storage_get_count(void);

/**
 * @brief 检查是否有离线数据
 *
 * @return true 有数据
 *         false 无数据
 */
bool offline_storage_has_data(void);

/**
 * @brief 清空所有离线数据
 *
 * @return ESP_OK 成功
 *         其他 失败
 */
esp_err_t offline_storage_clear_all(void);

/**
 * @brief 获取存储使用情况
 *
 * @param used 已使用字节数
 * @param total 总字节数
 * @return ESP_OK 成功
 *         其他 失败
 */
esp_err_t offline_storage_get_usage(size_t *used, size_t *total);

#endif // OFFLINE_STORAGE_H
