#ifndef MENU_PRESENTER_H
#define MENU_PRESENTER_H

#include "display.h"
#include "model.h"
#include "view.h"

typedef struct menu_presenter_t menu_presenter_t;

/* -------------------------------------------------------------------------
 * 结构体名: menu_presenter_t
 * 功能:
 *   菜单页面 Presenter 层对象，负责衔接输入事件、菜单导航状态与 View 刷新行为。
 *
 * 字段说明:
 *   menuCtrl     - 菜单运行时控制上下文，保存当前选中项、路径与刷新相关状态
 *   model        - 菜单 Model 实例，提供菜单树与运行时数据访问
 *   view         - 菜单 View 实例，提供界面刷新与绘制能力
 *   handle_input - Presenter 对外输入接口，负责处理按键并驱动导航状态变化
 *   refresh      - Presenter 对外刷新接口，负责按当前状态触发界面刷新
 *
 * 说明:
 *   - Presenter 位于 Model 与 View 之间：
 *       1) 从页面层接收输入事件
 *       2) 更新 `menuCtrl` 中的导航状态
 *       3) 根据状态变化调用 View 接口完成局部或整页刷新
 *   - 函数指针在 `MenuPresenter_Init()` 中完成绑定。
 * ------------------------------------------------------------------------- */

struct menu_presenter_t
{
    tagMenuCtrl menuCtrl;
    menu_model_t *model;
    menu_view_t *view;
    void (*handle_input)(struct menu_presenter_t *self, uint8_t keyVal);
    void (*refresh)(struct menu_presenter_t *self, uint8_t isFirstFrame);
};

void MenuPresenter_Init(menu_presenter_t *presenter,
                         menu_model_t *model,
                         menu_view_t *view);

#endif
