#ifndef _SERVICE_HOME_PAGE_H
#define _SERVICE_HOME_PAGE_H

#include <stdint.h>
#include <stdbool.h>
#include "core/lvgl/lvgl.h"

#ifdef __cplusplus
extern "C" {
#endif

/* ====================================================================================================================
 * 文件名称: service_home_page.h
 * 文件职责: 首页服务层头文件 - 业务逻辑中心，数据格式化，为UI提供可直接渲染的配置
 * 架构位置: Service层 (ViewModel)
 * ==================================================================================================================== */

#define HP_LABEL_MAX_LEN        16
#define HP_VALUE_MAX_LEN        24  /* 增大到24，容纳日期时间格式"2026-03-27 14:30:45"(19字符+结束符) */
#define HP_UNIT_MAX_LEN         8
#define HP_TITLE_MAX_LEN        16
#define HP_DATETIME_MAX_LEN     32
#define HP_MAX_ITEMS_PER_GROUP  4

/* 首页显示组类型（5个可切换的显示组） */
typedef enum {
    HP_GROUP_MCB = 0,     /* 母线侧电压 */
    HP_GROUP_LCB,         /* 线路侧电压 */
    HP_GROUP_LOAD_I,      /* 负荷电流 */
    HP_GROUP_ZERO_I,      /* 零序电流 */
    HP_GROUP_DEV_INFO,    /* 设备信息 */
    HP_GROUP_NUM          /* 组总数 */
} HomePageGroupType;

/* 单项数据显示配置 */
typedef struct {
    char label[HP_LABEL_MAX_LEN];      /* 标签文本，如"A相:" */
    char value[HP_VALUE_MAX_LEN];      /* 格式化后的值，如"220.05" */
    char unit[HP_UNIT_MAX_LEN];        /* 单位，如"V" */
    lv_color_t color;                  /* 显示颜色 */
    uint8_t visible;                   /* 是否可见 */
    uint8_t use_chinese_font;          /* 是否使用中文字体（设备信息组使用） */
    int16_t label_x;                   /* 标签X坐标，-1表示使用默认值 */
    int16_t label_y;                   /* 标签Y坐标，-1表示使用默认值 */
    int16_t value_x;                   /* 数值X坐标，-1表示使用默认值 */
    int16_t value_y;                   /* 数值Y坐标，-1表示使用默认值 */
    int16_t unit_x;                    /* 单位X坐标，-1表示使用默认值 */
    int16_t unit_y;                    /* 单位Y坐标，-1表示使用默认值 */
} HomePageItemConfig;

/* 首页页面配置结构（Service层输出） */
typedef struct {
    HomePageGroupType group_type;                    /* 当前组类型 */
    char group_title[HP_TITLE_MAX_LEN];              /* 组标题 */
    HomePageItemConfig items[HP_MAX_ITEMS_PER_GROUP]; /* 显示项配置 */
    uint8_t item_count;                              /* 实际项数 */
    uint8_t device_addr;                             /* 装置地址 */
    char datetime[HP_DATETIME_MAX_LEN];              /* 日期时间字符串 */
} HomePageViewConfig;

/**
 * @brief  初始化服务层
 */
void home_page_service_init(void);

/**
 * @brief  获取指定组的页面配置（核心接口）
 * @param  group   组类型
 * @param  config  输出参数，页面配置
 * @return true-成功, false-失败
 */
bool home_page_service_get_config(HomePageGroupType group, HomePageViewConfig *config);

/**
 * @brief  设置当前显示组
 * @param  group  组类型
 */
void home_page_service_set_group(HomePageGroupType group);

/**
 * @brief  获取当前显示组
 * @return 当前组类型
 */
HomePageGroupType home_page_service_get_current_group(void);

/**
 * @brief  切换下一组（循环）
 * @return 切换后的组类型
 */
HomePageGroupType home_page_service_next_group(void);

/**
 * @brief  切换上一组（循环）
 * @return 切换后的组类型
 */
HomePageGroupType home_page_service_prev_group(void);

#ifdef __cplusplus
}
#endif

#endif /* _SERVICE_HOME_PAGE_H */
