#ifndef UI_MANAGER_H
#define UI_MANAGER_H
#include "ui_config.h"
#include "data_config.h"
#include "ui_comp_ip_address.h"
#include "ui_comp_datetime_set.h"
#include "ui_comp_confirm_dialog.h"
#include "service/service_history_report.h"
#include "ui_pages/ui_main_menu.h"

void ui_manager_init();                                     //初始化
void ui_manager_init_page_ctx();                            //初始化下标
const PageCtx* ui_manager_get_page_ctx();                   //获取此时page上下文
void ui_manager_set_page_ctx(const PageCtx* ctx);           //设置page上下文
UICursorState ui_manager_get_cursor();                      //获取当前下标
void ui_manager_cursor_set_value(UICursorState curState);   //设置下标值
PwdType ui_manager_get_cur_pwdtype();                       //获取密码类型 （普通/超级密码）

void ui_manager_switch_page(PageCtx *ctx);                //选择界面
void ui_manager_select_index(u8 index);                     //设置选中
PageType ui_manager_get_curpage();                         //获取当前页

//组件操作相关函数
//密码输入框
void ui_manager_comp_create_input_pwd();                            //创建密码输入框界面
int  ui_manager_comp_get_pwd();                                     //获取密码输入框内容
void ui_manager_comp_set_pwd(SpinboxSetOperate type);               //设置密码框内容

//设置输入框相关
void ui_manager_comp_create_set_valist(const UiSetValueOptDef *ui_opt);   //创建修改数值框
void ui_manager_comp_opera_set_valist(SpinboxSetOperate type);      //操作数值框
float  ui_manager_comp_get_valist_spinbox_value();                    //获取数值框

//保存确认框相关
void ui_manager_comp_create_confirm_save();                           //创建保存确认对话框（使用默认配置）
void ui_manager_comp_create_confirm_save_with_config(const confirm_dialog_config_t *config);  //创建保存确认对话框（使用自定义配置）
void ui_manager_comp_switch_confirm_save_focus();                    //切换保存确认对话框焦点
bool ui_manager_comp_get_confirm_save_result();                       //获取保存确认对话框结果

//IP地址设置框相关
void ui_manager_comp_create_ip_address(uint32_t ip_address);         //创建IP地址设置框
void ui_manager_comp_ip_address_handle_up();                         //处理上方向键操作
void ui_manager_comp_ip_address_handle_down();                       //处理下方向键操作
void ui_manager_comp_ip_address_handle_left();                       //处理左方向键操作
void ui_manager_comp_ip_address_handle_right();                      //处理右方向键操作
void ui_manager_comp_ip_address_handle_enter();                      //处理确定键操作
ip_address_op_t ui_manager_comp_get_ip_address_result();             //获取IP地址设置结果
uint32_t ui_manager_comp_get_ip_address_value();         //获取输入的IP地址

//时间设置框相关
void ui_manager_comp_create_datetime_set(datetime_value_t *datetime);  //创建时间设置框
void ui_manager_comp_datetime_set_handle_up();                         //处理上方向键操作
void ui_manager_comp_datetime_set_handle_down();                       //处理下方向键操作
void ui_manager_comp_datetime_set_handle_left();                       //处理左方向键操作
void ui_manager_comp_datetime_set_handle_right();                      //处理右方向键操作
void ui_manager_comp_datetime_set_handle_enter();                      //处理确定键操作
datetime_op_t ui_manager_comp_get_datetime_set_result();               //获取时间设置结果
datetime_value_t ui_manager_comp_get_datetime_set_value();             //获取设置的时间值
bool ui_manager_comp_datetime_set_is_valid();                          //检查时间是否有效

//模块化函数
void ui_manager_select_list_data(UICursorState curState,GeneralListPageConfig_t *config);
void ui_manager_show_menu_data(PageCtx *ctx,GeneralListPageConfig_t *config);
void ui_manager_gerneral_list(PageCtx *ctx,GeneralListPageConfig_t *config);
void ui_manager_refresh_list(UICursorState curstate , GeneralListPageConfig_t *config);

//历史报告页面函数
void ui_manager_history_report_create(PageCtx *ctx, HistoryReportPageConfig *config);    //创建历史报告页面
void ui_manager_history_report_refresh(UICursorState curstate, HistoryReportPageConfig *config);  //刷新历史报告页面

//主菜单页面函数
void ui_manager_main_menu_create(PageCtx *ctx, const UIMainMenuConfig *config);
void ui_manager_main_menu_refresh(uint8_t selected_idx);
void ui_manager_switch_to_main_menu(uint8_t selected_idx);

#endif  //UI_MANAGER_H
