#ifndef YC_VIEW_H
#define YC_VIEW_H

#include "types.h"
#include "Drv/pages/global/renderer_lcd.h"


/* 与 model.h 中 YC_ITEMS_PER_PAGE 保持一致 */
#define YC_VIEW_ROWS_MAX (8U)
#define YC_VIEW_NAME_BUF_MAX (16U)
#define YC_VIEW_VALUE_BUF_MAX (28U)

/**
 * 遥测页绘制用展示快照：由 Presenter 从 model/表 填充文本，View 只负责布局与绘制，
 * 不调用 Yc_Table_* 或 model 层。
 */
typedef struct yc_view_input_t
{
    const uint8_t *top_name;
    uint8_t empty;
    uint16_t page;
    uint16_t page_max;
    uint16_t cursor_row;
    uint16_t rows_on_page;
    /** 为 1 表示该行有有效遥测项，需绘制 row_name/row_value */
    uint8_t row_valid[YC_VIEW_ROWS_MAX];
    const uint8_t *row_name[YC_VIEW_ROWS_MAX];
    uint8_t row_value[YC_VIEW_ROWS_MAX][YC_VIEW_VALUE_BUF_MAX];
} yc_view_input_t;

typedef struct view_t view_t;

typedef struct view_t {
    void (*show_top_name)(const uint8_t *name);
    void (*show_info_page)(uint16_t wPageNum, uint16_t wPageMax);
    void (*draw_full)(view_t *view, const yc_view_input_t *input);
    void (*draw_values)(view_t *view, const yc_view_input_t *input);
} view_t;

void View_Init(view_t *view);

#endif