/**
 * @file app_version_info.c
 * @brief 版本信息应用层实现文件
 *
 * 本模块封装版本信息页面的业务逻辑，属于App层。
 * 作为MVVM架构中的协调者，负责：
 * - 调用Service层获取页面配置
 * - 调用UI层创建页面
 * - 处理页面按键事件
 *
 * 设计优点：
 * - 与ui_manager_switch_page解耦，便于后续架构优化
 * - 接口与其他App模块一致，便于统一管理和维护
 */

#include "app_version_info.h"
#include "ui/ui/ui_pages/ui_version_info_page.h"
#include "ui/service/service_version_info.h"
#include "ui/ui/ui_common/ui_cont.h"
#include "service/service_main_menu.h"

/**
 * @brief 创建版本信息页面
 *
 * 封装版本信息页面的完整创建流程，遵循MVVM架构：
 * 1. 清理UI容器（清除之前页面的控件）
 * 2. 设置页面上下文（更新全局状态）
 * 3. 初始化Service层（预留接口）
 * 4. 获取页面配置（Service层组装数据）
 * 5. 创建页面（UI层根据配置渲染）
 *
 * @param[in] ctx 页面上下文指针，包含页面类型和光标状态
 * @param[in] menu_sel_idx 菜单选择索引（保留参数，与其他模块接口统一）
 * @param[in] record_idx 记录索引（保留参数，与其他模块接口统一）
 *
 * @note 参数说明：
 *       - menu_sel_idx 和 record_idx 为保留参数，用于与其他App模块保持接口一致性
 *       - 版本信息页面为静态页面，不需要菜单选择和记录索引
 */
void app_version_info_create_page(PageCtx *ctx, uint8_t menu_sel_idx, uint32_t record_idx)
{
    /* 参数合法性检查 */
    if (ctx == NULL) {
        return;
    }

    /* 清理UI容器，移除之前页面的所有控件 */
    ui_cont_clean();

    /* 设置页面上下文，更新全局页面状态 */
    /* 包括：当前页面类型、光标位置、菜单索引等 */
    ui_manager_set_page_ctx(ctx);

    /* 初始化Service层（当前为预留接口） */
    version_info_service_init();

    /* 通过Service层获取页面配置 */
    /* Service层负责：调用Data层获取原始数据 -> 格式化数据 -> 组装页面配置 */
    VersionInfoPageConfig config;
    if (version_info_service_get_page_config(&config)) {
        /* 通过UI层创建页面 */
        /* UI层负责：根据配置创建LVGL控件 -> 设置样式和位置 -> 显示页面 */
        version_info_page_create(&config);
    }

    /* 避免未使用参数警告（保留参数用于接口统一） */
    (void)menu_sel_idx;
    (void)record_idx;
}

/**
 * @brief 处理版本信息页面按键事件
 *
 * 处理版本信息页面的按键事件。
 * 版本信息页面为只读静态页面，仅支持返回操作。
 *
 * @param[in] kval 按键值
 *
 * 支持的操作：
 * - KEY_DATA_BACK: 返回主菜单（版本信息菜单项）
 */
void app_version_info_handle_event(keyValue kval)
{
    switch (kval) {
        case KEY_DATA_BACK:
            /* 返回主菜单，光标定位在版本信息菜单项 */
            ui_manager_switch_to_main_menu(MAIN_MENU_DEV_INFO);
            break;

        default:
            /* 版本信息页面为只读页面，其他按键无响应 */
            break;
    }
}
