/**
 * @file data_version_info.h
 * @brief 版本信息数据层头文件
 *
 * 本模块为版本信息界面提供底层数据支撑，属于MVVM架构中的Model层。
 * 负责管理和提供原始版本信息数据，目前数据为硬编码（阶段1），
 * 后续可接入底层系统接口获取真实数据（阶段2）。
 *
 * 数据流向：
 * data_version_info_get() → service_version_info → ui_version_info_page
 */

#ifndef _DATA_VERSION_INFO_H_
#define _DATA_VERSION_INFO_H_

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

/* ============================ 字段长度定义 ============================= */

/**
 * @brief 设备名称最大长度
 * @note 考虑中文设备名称，设置为32字节
 */
#define VERSION_INFO_DEVICE_NAME_MAX_LEN    32

/**
 * @brief 设备型号最大长度
 * @note 型号代码通常为字母数字组合，32字节足够
 */
#define VERSION_INFO_MODEL_MAX_LEN          32

/**
 * @brief 硬件版本最大长度
 * @note 硬件版本号通常较短，16字节足够
 */
#define VERSION_INFO_HW_VERSION_MAX_LEN     16

/**
 * @brief 软件版本最大长度
 * @note 软件版本号格式如SV01.002，16字节足够
 */
#define VERSION_INFO_SW_VERSION_MAX_LEN     16

/**
 * @brief 启动程序版本最大长度
 * @note 启动版本格式较长，包含日期信息，如NW24_DC_20251125_001
 */
#define VERSION_INFO_BOOT_VERSION_MAX_LEN   24

/**
 * @brief 制造商名称最大长度
 * @note 制造商名称可能较长，设置为64字节
 */
#define VERSION_INFO_VENDOR_MAX_LEN         64

/* ============================ 数据结构定义 ============================= */

/**
 * @brief 版本信息数据结构（原始数据）
 *
 * 该结构体存储设备版本信息的原始数据，作为Data层与Service层之间的数据载体。
 * 所有字符串字段均以'\0'结尾，确保与标准C字符串函数兼容。
 *
 * @note 当前为硬编码数据（阶段1），后续需接入底层接口获取真实数据
 */
typedef struct {
    char device_name[VERSION_INFO_DEVICE_NAME_MAX_LEN];      /**< 设备名称 */
    char model[VERSION_INFO_MODEL_MAX_LEN];                  /**< 设备型号 */
    char crc_info[VERSION_INFO_HW_VERSION_MAX_LEN];         /**< CRC信息 */
    char software_version[VERSION_INFO_SW_VERSION_MAX_LEN];  /**< 软件版本号 */
    char hardware_version[VERSION_INFO_BOOT_VERSION_MAX_LEN];     /**< 硬件版本号 */
    char vendor[VERSION_INFO_VENDOR_MAX_LEN];                 /**< 制造商名称 */
} VersionInfoData;

/* ============================ 接口函数声明 ============================= */

/**
 * @brief 获取版本信息数据
 *
 * 该函数将版本信息数据复制到指定的输出参数中。
 * 采用复制而非直接返回指针的方式，确保数据封装性，避免外部直接修改内部数据。
 *
 * @param[out] data 输出参数，指向存储版本信息的结构体指针
 * @return true-获取成功，false-获取失败（通常因data参数为NULL）
 *
 * @note 线程安全性：当前实现为只读操作，无线程安全问题
 *       若后续接入底层接口，需考虑线程同步
 */
bool data_version_info_get(VersionInfoData *data);

/**
 * @brief 初始化版本信息数据层
 *
 * 系统启动时调用的初始化函数。
 * 当前为预留接口，用于数据预加载或底层接口初始化。
 *
 * @note 阶段1（当前）：该函数为空实现
 *       阶段2（后续）：需在此实现底层接口初始化和自检
 */
void data_version_info_init(void);

#endif /* _DATA_VERSION_INFO_H_ */
