#ifndef _UI_CONFIG_H
#define _UI_CONFIG_H

#include "../core/lvgl/lvgl.h"
#include "data_config.h"
#include "bsp_type.h"

#define SUPER_PWD 99 // 定义超级密码

#define Default_HZ_color LV_COLOR_BLACK                  // LV_COLOR_WHITE
#define Default_PA_color LV_COLOR_MAKE(0xFF, 0x7F, 0x00) // LV_COLOR_BLACK  //LV_COLOR_YELLOW
#define Default_PB_color LV_COLOR_GREEN                  // LV_COLOR_GREEN
#define Default_PC_color LV_COLOR_RED                    // LV_COLOR_RED
#define Dev_Back_color LV_COLOR_WHITE                    // LV_COLOR_BLACK

#define DEFAULT_RIGHT_DATA_ITEM_COUNT   8       //右边数据栏最大数量
#define DEFAULT_LEFT_MENU_INDEX 8               //左边菜单栏默认选择
#define DEFAULT_RIGHT_DATA_ITEM_INDEX 0         //右边数据栏默认ID


LV_FONT_DECLARE(GBhzk22);
LV_FONT_DECLARE(GBhzk30);
// LV_FONT_DECLARE(GBwryh40);

extern const char *imgpathlv[15];

typedef enum
{
    MAIN_MENU_DEV_SET,          //装置参数
    MAIN_MENU_DEV_FIX,          //定值整定
    MAIN_MENU_DEV_SET_SHOW,     //装置参数查看
    MAIN_MENU_DEV_FIX_SHOW,     //定值查看
    MAIN_MENU_REAL_TIME_DATA,   //实时数据
    MAIN_MENU_HISTORY_DATA,     //历史报告
    MAIN_MENU_DEBUG_TEST,       //出厂调试
    MAIN_MENU_DEV_INFO,         //版本信息
} MenuType;

typedef enum
{
    SPINBOX_SET_LEFT,
    SPINBOX_SET_RIGHT,
    SPINBOX_SET_UP,
    SPINBOX_SET_DOWN,
} SpinboxSetOperate;


// 光标位置枚举
typedef enum {
    CURSOR_LEFT_MENU,   // 光标在左侧菜单
    CURSOR_RIGHT_DATA,  // 光标在右侧数据列表
    CURSOR_INPUT_PWD,   // 此时处于密码输入框
    CURSOR_CHANGE_VAL,  // 此时处于数值修改
    CURSOR_CONFIRM_SAVE,  // 此时处于保存确认状态
    CURSOR_SET_IP,      // 此时处于IP设置
    CURSOR_CONTROL_YK,  // 此时处于遥控状态
} CursorPosition;

// UI光标状态结构体
typedef struct {
    CursorPosition cursor_pos;
    int left_menu_idx;
    int right_data_idx;
} UICursorState;

// 定义密码类型枚举（清晰区分不同权限）
typedef enum {
    UI_PWD_TYPE_NONE = 0,    // 无密码（默认）
    UI_PWD_TYPE_NORMAL,      // 普通密码
    UI_PWD_TYPE_SUPER        // 超级密码
} PwdType;

typedef enum {
    PAGE_HOME_PAGE,          //首页
    PAGE_MAIN_MENU,         //主菜单
    PAGE_DEV_SET,           //装置参数
    PAGE_DEV_FIX,           //定值整定
    PAGE_DEV_SET_SHOW,      //装置参数查看
    PAGE_DEV_FIX_SHOW,      //定值查看
    PAGE_REAL_TIME_DATA,    //实时数据
    PAGE_HISTORY_DATA,      //历史报告
    PAGE_DEBUG_TEST,        //出厂调试
    PAGE_DEV_INFO,          //版本信息
    PAGE_NUM
} PageType;

// 页面上下文结构体（存储页面所需的额外参数）
typedef struct
{
    PageType cur_page;         // 当前页面
    UICursorState cursor_state; // 光标位置
    PwdType pwd_type;     // 密码类型(主要为dev_set 和fix_set 使用)
    // 未来可扩展其他参数：如菜单索引、用户权限、配置项等
} PageCtx;

/* ============================ 通用配置结构体（类的属性） ============================= */
// 单个菜单项配置（左侧）
typedef struct {
    char text[32];        // 菜单文本
    bool is_selected;     // 是否选中
    lv_color_t color;     // 文本颜色
    //lv_font_t *font;      // 字体
} GeneralLeftMenuItem_t;

// 单个数据项配置（右侧）
typedef struct {
    char name[32];        // 名称文本
    char value[32];       // 值/状态文本
    u16   value_posx;       // 值的X坐标 （Y坐标都固定）
    char  unit[8];         // 单位（无则为空）
    u16   unit_posx;       // 单位的X坐标 （Y坐标都固定）
    //bool is_selected;     // 是否选中
    lv_color_t name_color;// 名称颜色
    lv_color_t value_color;// 名称颜色
    lv_color_t unit_color;// 值颜色
    //lv_font_t *font;      // 字体
} GeneralRightDataItem_t;

// 通用列表页整体配置（创建/刷新时传入）
typedef struct {
    // 基础信息
    uint8_t page_id;      // 页面ID（用于UImanager管理）
    char path_text[64];   // 顶部路径文本（如“首页>实时数据>遥信”）
    
    // 左侧菜单（最多8项）
    uint8_t left_menu_count;                // 实际菜单数量（≤8）
    GeneralLeftMenuItem_t left_menu[8];     // 8个菜单项
    
    // 右侧数据项（最多8项）
    uint8_t right_data_count;               // 实际数据项数量（≤8）
    GeneralRightDataItem_t right_data[8];   // 8个数据项
    
    // 分页滑块配置（无分页则count=0）
    uint8_t total_page;    // 总页数 页数暂时无用
    uint8_t current_page;  // 当前页

    uint8_t slider_size;
    uint8_t slider_value;
    
    // 样式配置（统一风格）
    lv_color_t bg_color;   // 背景色
    lv_color_t default_hz_color; // 默认文字颜色
} GeneralListPageConfig_t;

// 通用列表页控件句柄（内部管理，外部无需修改）
typedef struct {
    lv_obj_t *cont;                // 根容器
    lv_obj_t *path_label;          // 顶部路径标签
    lv_obj_t *left_menu_labels[8]; // 左侧菜单标签
    lv_obj_t *right_name_labels[8];// 右侧名称标签
    lv_obj_t *right_value_labels[8];// 右侧值标签
    lv_obj_t *right_unit_labels[8];// 右侧单位标签
    lv_obj_t *slider;              // 分页滑块
    GeneralListPageConfig_t config;// 当前配置
} GeneralListPage_t;



// UI层选项列表结构体
typedef struct {
    const char *str; // 选项文本
    DWORD dat;       // 选项对应值
} UiSetOption;

typedef enum {
    UISETOPT_TYPE_LIST,
    UISETOPT_TYPE_NUMBER,
    UISETOPT_TYPE_IP
} UiSetValType;

// 设置界面页数据结构体
typedef struct {
    const char *title;        // 定值名称（对应szName）
    const char *set_str;        // 设置名称（设置数值/选项）
    float curr_value;         // 当前值（缺省值fDef）
    uint32_t curr_ip;         // 当前ip
    float max_value;          // 最大值（fMax）
    float min_value;          // 最小值（fMin）
    float step;               // 步长（fStep）
    int decimal_digit;        // 小数位数（由step推导：1→0位，0.01→2位）
    const UiSetOption *opt_list; // 非数值型选项列表
    int opt_list_num;         // 选项数量（listnum）
    const char *unit;         // 单位字符串（由wUnit转换）
    UiSetValType type;                // 定值类型（wType：SETTYPE_LIST/SETTYPE_F）
} UiSetValueOptDef;

// 定值设置页面配置结构体
typedef struct {
    uint8_t page_id;      // 页面ID
    char path_text[64];   // 路径文本
    UiSetValueOptDef ui_opt; // 定值设置选项
    lv_color_t bg_color;  // 背景颜色
} SetValueListPageConfig_t;

// 定值设置页面结构体
typedef struct {
    lv_obj_t *cont;                // 容器
    lv_obj_t *win;                 // 窗口
    lv_obj_t *list_label;          // 非数值型选项标签
    lv_obj_t *spinbox;             // 数值设置spinbox
    lv_obj_t *unit_label;          // 单位标签
    lv_obj_t *min_label;           // 最小值标签
    lv_obj_t *max_label;           // 最大值标签
    lv_obj_t *curr_label;          // 当前值标签
    SetValueListPageConfig_t config; // 当前配置
    float g_step;                  // 步长
    int g_decimal_digit;           // 小数位数
} SetValueListPage_t;


// IP地址设置操作类型
typedef enum {
    IP_ADDRESS_OP_OK = 1,
    IP_ADDRESS_OP_CANCEL,
    IP_ADDRESS_OP_OTHER
} ip_address_op_t;


#endif

