#ifndef __BATTERY_MANAGER_H__
#define __BATTERY_MANAGER_H__

#include "rtthread.h"
#include <stdint.h>
#include <stdbool.h>


/**
 * @brief 电池管理状态枚举
 * @details 定义电池管理模块的状态，用于表示电池的当前状态。
*/
typedef enum {
    BATTERY_MGR_STATUS_UNKNOWN,         /**< 未知状态 */
    BATTERY_MGR_STATUS_DISCHARGING,     /**< 放电中 */
    BATTERY_MGR_STATUS_CHARGING,        /**< 充电中 */
    BATTERY_MGR_STATUS_FULL,            /**< 已充满 */
    BATTERY_MGR_STATUS_FAULT,           /**< 故障保护 */
} battery_mgr_status_t;

/*
 * @brief 电池管理事件类型 
 * @details 定义电池管理模块触发的事件类型，用于通知上层应用或其他模块。
*/
typedef enum {
    BATTERY_MGR_EVENT_ENTRY_SLEEP = 0,  /**< 进入休眠状态 */
    BATTERY_MGR_EVENT_LOW_POWER,        /**< 低电量报警 */
    BATTERY_MGR_EVENT_OVER_TEMP,        /**< 过温报警 */
    BATTERY_MGR_EVENT_CHARGE_START,     /**< 开始充电 */
    BATTERY_MGR_EVENT_CHARGE_FULL,      /**< 充满电 */
    BATTERY_MGR_EVENT_CHARGE_DONE,      /**< 充电完成 */
    BATTERY_MGR_EVENT_UPDATE,           /**< 数据周期性更新 */

    BATTERY_MGR_EVENT_MAX,              /**< 事件最大数量 */
} battery_mgr_event_t;

/**
 * @brief 核心电池信息 (经过算法处理后的)
 * @details 定义电池管理模块处理后的电池信息，包括电量、容量、状态等。
*/
typedef struct {
    uint8_t soc;                        /**< 最终显示的电量 */
    battery_mgr_status_t status;        /**< 当前状态 */
    bool is_sleep;                      /**< 是否进入休眠 */
    bool is_low_power;                  /**< 是否低电量 */
} battery_mgr_info_t;

/* 核心回调 */
typedef void (*battery_mgr_callback_t)(battery_mgr_event_t event, const battery_mgr_info_t *info);



/*
 * @brief 初始化电池管理器
 * @details 该函数初始化电池管理器，创建定时器并启动它。
 * @return rt_err_t 返回初始化状态，RT_EOK 表示成功，其他值表示失败
 */
rt_err_t battery_mgr_init(void);

/*
 * @brief 电池管理器线程入口函数
 * @details 该函数在电池管理器线程中运行，主要负责处理电池状态更新和通知。
 * @param parameter 线程参数，通常是电池管理器实例指针
 */
static void battery_mgr_thread_entry(void *parameter);

/*
 * @brief 注册电池管理器事件回调函数
 * @details 该函数用于注册电池管理器事件回调函数，当电池状态发生变化时，会调用该回调函数。
 * @param observer 电池管理器事件回调函数指针
 * @return rt_err_t 返回注册状态，RT_EOK 表示成功，其他值表示失败   
*/
rt_err_t battery_mgr_register_observer(battery_mgr_callback_t observer);



#endif  /* __BATTERY_MANAGER_H__ */


