#ifndef _SERVICE_HISTORY_REPORT_H_
#define _SERVICE_HISTORY_REPORT_H_

#include "data/data_history_report.h"
#include "ui/ui_config.h"

/* ============================ 常量定义 ============================= */

// 历史报告页面坐标定义
#define HR_PATH_LABEL_X                 10
#define HR_PATH_LABEL_Y                 10
#define HR_LEFT_MENU_X                  12
#define HR_LEFT_MENU_BASE_Y             50
#define HR_LEFT_MENU_SPACING            32
#define HR_RIGHT_CONTENT_X              135
#define HR_RIGHT_CONTENT_Y              50
#define HR_RIGHT_LINE_SPACING           24
#define HR_RECORD_INDEX_X               380
#define HR_RECORD_INDEX_Y               50

// 历史报告页面颜色定义
#define HR_COLOR_DEFAULT                LV_COLOR_BLACK
#define HR_COLOR_SELECTED               LV_COLOR_RED
#define HR_COLOR_NO_RECORD              LV_COLOR_GRAY

// 最大显示行数
#define HR_MAX_DISPLAY_LINES            8

/* ============================ 数据类型定义 ============================= */

/**
 * @brief 历史报告页面配置结构体（统一版本）
 * @note 支持单记录和多记录（每页两条）两种显示模式
 *       显示内容通过 record_content 数组按行存储，UI层按行号渲染
 */
typedef struct {
    // 基础信息
    char path_text[64];                 // 顶部路径文本
    uint8_t left_menu_count;            // 左侧菜单数量
    uint8_t left_menu_sel_idx;          // 当前选中菜单索引

    // 分页信息
    uint32_t total_records;             // 总记录数
    uint32_t current_page;              // 当前页码（从1开始）
    uint32_t total_pages;               // 总页数
    uint32_t records_per_page;          // 每页记录数（1或2）

    // 显示内容 - 按行存储，最多8行
    char record_content[HR_MAX_DISPLAY_LINES][64];
    uint8_t line_count;                 // 实际行数

    // 状态
    bool has_records;                   // 是否有记录

    // 光标位置
    bool cursor_in_right;               // 光标是否在右侧内容区
} HistoryReportPageConfig;

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

/**
 * @brief 获取页面显示数据（统一接口）
 * @param type 历史报告类型
 * @param page_idx 页码索引（从0开始）
 * @param config 输出参数，页面配置数据
 * @note 根据类型自动选择单记录或多记录显示模式
 */
void history_report_service_get_page_data(HistoryReportType type,
                                          uint32_t page_idx,
                                          HistoryReportPageConfig *config);

/**
 * @brief 获取记录总数
 * @param type 历史报告类型
 * @return 记录总数
 */
uint32_t history_report_service_get_total_count(HistoryReportType type);

/**
 * @brief 获取总页数
 * @param type 历史报告类型
 * @return 总页数
 */
uint32_t history_report_service_get_total_pages(HistoryReportType type);

/**
 * @brief 初始化历史报告service层
 */
void history_report_service_init(void);

#endif /* _SERVICE_HISTORY_REPORT_H_ */
