#ifndef WEBRTCPUSH_TIME_SYNC_H
#define WEBRTCPUSH_TIME_SYNC_H

/*
 * time_sync — SNTP (RFC 4330) 时间同步, RV1106 无 RTC 电池专用
 *
 * 背景: 设备断电重启后系统时间错乱, wss (TLS) 证书校验依赖系统时间,
 *       时间不对则信令永远连不上 ([ws] error: TLS connection failed 死循环)。
 *
 * 实现: 纯 C 的 SNTP 客户端 (UDP :123), 不依赖 busybox ntpd 是否存在:
 *   1) 构造 48 字节 SNTP 请求 (LI=0 VN=3 Mode=3)
 *   2) 依次尝试多台 NTP 服务器 (国内源优先), 每台带超时
 *   3) 解析响应 Transmit Timestamp (NTP 1900 纪元 -> Unix 1970)
 *      并按 (T4-T1)/2 半 RTT 补偿网络延迟
 *   4) settimeofday 写回系统时间 (需 root, 设备默认 root 运行)
 */

#include <stdbool.h>

#ifdef __cplusplus
extern "C" {
#endif

/* 返回码 */
#define TIME_SYNC_OK           0
#define TIME_SYNC_ERR_TIMEOUT (-1)   /* 所有服务器都超时/失败 */
#define TIME_SYNC_ERR_SETTIME (-2)   /* settimeofday 失败 (非 root?) */

/* 检查当前系统时间是否合理 (年份在 [2025, 2100]) */
bool time_sync_time_valid(void);

/*
 * 阻塞式 SNTP 同步: 依次轮询内置服务器列表, 每台超时 timeout_ms。
 * 成功后 settimeofday 并返回 TIME_SYNC_OK, 失败返回负值。
 */
int time_sync_sntp(int timeout_ms_per_server);

/*
 * 便捷入口 (main 启动时调用):
 *   时间已合理 -> 直接返回 true (不阻塞);
 *   时间不合理 -> 执行 SNTP 同步, 返回同步后时间是否可用。
 */
bool time_sync_ensure(void);

#ifdef __cplusplus
}
#endif

#endif /* WEBRTCPUSH_TIME_SYNC_H */
