#ifndef REDIS_SN_CLIENT_H
#define REDIS_SN_CLIENT_H

#include <stddef.h>

// Redis SN客户端配置
#define REDIS_HOST "180.163.74.83"  // Redis服务器地址
#define REDIS_PORT 6379              // Redis端口
#define REDIS_PASSWORD "Zzh08165511" // Redis密码
#define SN_POOL_KEY "Zzh08165511"    // SN池键名
#define MAX_SN_LENGTH 64             // 最大SN长度
#define REDIS_CONNECTION_TIMEOUT 5   // 连接超时时间（秒）

/**
 * 初始化Redis SN客户端
 * @return 0成功，-1失败
 */
int init_redis_sn_client();

/**
 * 从Redis SN池中获取一个唯一的设备SN
 * @param sn_buffer 用于存储获取到的SN的缓冲区
 * @param buffer_size 缓冲区大小
 * @return 0成功，-1失败
 */
int get_device_sn_from_redis(char *sn_buffer, size_t buffer_size);

/**
 * 从Redis SN池中获取设备SN和MAC地址
 * @param sn_buffer 用于存储获取到的SN的缓冲区
 * @param sn_buffer_size SN缓冲区大小
 * @param mac_buffer 用于存储获取到的MAC地址的缓冲区
 * @param mac_buffer_size MAC缓冲区大小
 * @return 0成功，-1失败
 */
int get_device_sn_and_mac_from_redis(char *sn_buffer, size_t sn_buffer_size, char *mac_buffer, size_t mac_buffer_size);

/**
 * 格式化MAC地址，添加冒号分隔符
 * @param raw_mac 原始MAC地址（如90A9F73005FB）
 * @param formatted_mac 格式化后的MAC地址缓冲区（如90:A9:F7:30:05:FB）
 * @param buffer_size 缓冲区大小
 * @return 0成功，-1失败
 */
int format_mac_address(const char *raw_mac, char *formatted_mac, size_t buffer_size);

/**
 * 检查SN池中剩余的SN数量
 * @return SN数量，-1表示失败
 */
int check_sn_pool_count();

/**
 * 根据生产批次号码从Redis中查找对应的SN和MAC地址
 * @param batch_number 生产批次号码（如D20250422006504）
 * @param sn_buffer 用于存储获取到的SN的缓冲区
 * @param sn_buffer_size SN缓冲区大小
 * @param mac_buffer 用于存储获取到的MAC地址的缓冲区
 * @param mac_buffer_size MAC缓冲区大小
 * @return 0成功，-1失败
 */
int get_sn_mac_by_batch_number(const char *batch_number, char *sn_buffer, size_t sn_buffer_size, char *mac_buffer, size_t mac_buffer_size);

/**
 * 测试Redis连接
 * @return 0成功，-1失败
 */
int test_redis_connection();

/**
 * 清理Redis SN客户端资源
 */
void cleanup_redis_sn_client();

/**
 * 发送审计日志到Redis
 * @param batch 批次号
 * @param mac MAC地址
 * @param note 备注（可为NULL）
 * @return 0成功，-1失败
 */
int send_audit_to_redis(const char *batch, const char *mac, const char *note);

#endif // REDIS_SN_CLIENT_H