#ifndef FORMCCUSETTING_H
#define FORMCCUSETTING_H

#include <QWidget>
#include "BaseWidget.h"

#include "DataTypeDef.h"

namespace Ui {
class FormCcuSetting;
}

/**
 * @class FormCcuSetting
 * @brief FormCcuSetting 类用于管理 CCU 设置的界面。
 * 
 * FormCcuSetting 类继承自 BaseWidget，用于显示和操作 CCU（Central Control Unit）的设置界面。
 * 它提供了刷新数据、获取 CCU 配置等功能，并重写了显示和隐藏事件的处理方法。
 * 
 * 核心功能包括：
 * - 刷新 CCU 设置数据
 * - 获取 CCU 配置
 * - 处理显示和隐藏事件
 * 
 * 使用示例：
 * @code
 * FormCcuSetting form;
 * form.show();
 * @endcode
 * 
 * 构造函数参数：
 * - parent: 指向父窗口的指针，默认为 nullptr。
 * 
 * 注意事项：
 * - 在使用该类时，请确保已经正确初始化了父窗口。
 * - 该类依赖于 Qt 框架，因此需要在 Qt 项目中使用。
 */
class FormCcuSetting : public BaseWidget
{
    Q_OBJECT

public:
    /**
     * @brief 构造函数，创建一个 FormCcuSetting 对象。
     * @param parent 指向父窗口的指针，默认为 nullptr。
     */
    explicit FormCcuSetting(BaseWidget *parent = nullptr);
    
    /**
     * @brief 析构函数，销毁 FormCcuSetting 对象。
     */
    ~FormCcuSetting();

    /**
     * @brief 返回父窗口指针。
     * @return 父窗口指针。
     */
    bool returnParent() override;

private:
    void initWidget();
    void initConnect();
    void connectAllValueChanged(QWidget *widget);
    /**
     * @brief 刷新 CCU 设置数据。
     * @param data CCU 配置数据。
     */
    void refreshData(const CCU_CFG& data);
    
    /**
     * @brief 获取 CCU 配置。
     * @param data 用于存储 CCU 配置的引用。
     * @return 获取是否成功。
     */
    bool getCCUConfig(CCU_CFG& data);

protected:
    /**
     * @brief 显示事件处理方法。
     * @param event 显示事件对象。
     */
    void showEvent(QShowEvent* event) override;
    
    /**
     * @brief 隐藏事件处理方法。
     * @param event 隐藏事件对象。
     */
    void hideEvent(QHideEvent* event) override;

private slots:
    void onValueChanged();

private:
    /**
     * @brief 指向 UI 类的指针。
     */
    Ui::FormCcuSetting *ui;
    
    /**
     * @brief 存储 CCU 配置的数据。
     */
    CCU_CFG m_ccu_cfg;
};

#endif // FORMCCUSETTING_H
