#pragma once

#include "wifi_board.h"
#include "boards/common/qmi8658a.h"

namespace iot {
    class ImuSensorThing;
}

class PowerSaveTimer;

class MovecallMojiESP32S3 : public WifiBoard {
public:
    MovecallMojiESP32S3();
    ~MovecallMojiESP32S3();

    // IMU传感器相关方法
    bool IsImuInitialized() const;
    bool GetImuData(qmi8658a_data_t* data);
    void OnMotionDetected();

    // 触摸相关方法
    void LockTouchTask(int touch_pad_num);
    void UnlockTouchTask();
    void ResetAllTouchStates();

    // 生产测试模式
    void EnterProductionTestMode();

private:
    // 私有成员变量和方法的声明
    PowerSaveTimer* power_save_timer_;
    static MovecallMojiESP32S3* instance_;
    
    // IMU传感器相关
    QMI8658A* imu_sensor_;
    esp_timer_handle_t imu_timer_handle_;
    qmi8658a_data_t latest_imu_data_;
    bool imu_initialized_;
    iot::ImuSensorThing* imu_thing_;
    
    // 其他私有成员...
    // (完整的私有成员列表在.cc文件中)
    
    // 私有方法声明
    void InitializeImuSensor();// 初始化IMU传感器（QMI8658A 陀螺仪）
    void InitializeIot();// 初始化IoT设备（包括IMU传感器）
    void ProcessImuData(const qmi8658a_data_t* data);// 处理IMU数据的方法
    
    // 静态回调函数
    static void ImuTimerCallback(void* arg);// IMU传感器定时器回调函数
};