#ifndef DIALOGCHARGINGPOPUP_H
#define DIALOGCHARGINGPOPUP_H

#include <QDialog>
#include <QLabel>
#include <QButtonGroup>

namespace Ui {
class DialogChargingPopup;
}

namespace EditType {
constexpr int SOC       = 0x0;
constexpr int ENERGY    = 0x1;
constexpr int TIME      = 0x2;
}

/**
 * @brief 对话框充电弹出窗口类，用于显示充电相关的信息。
 * 
 * 该类继承自QDialog，用于在应用程序中显示一个对话框，用于显示充电相关的信息。
 * 它包含了一些核心功能，如初始化界面、更新显示、设置背景等。
 * 
 * @param parent 父窗口指针，默认为nullptr。
 * @param type 对话框类型，默认为EditType::SOC。
 */
class DialogChargingPopup : public QDialog
{
    Q_OBJECT

public:
    explicit DialogChargingPopup(QWidget *parent = nullptr, int type = EditType::SOC);
    ~DialogChargingPopup();

    /**
     * @brief 获取当前对话框的值。
     * 
     * @return 当前对话框的值。
     */
    int getValue();

private:
    /**
     * @brief 初始化界面组件。
     */
    void initWidget();

    /**
     * @brief 初始化信号槽连接。
     */
    void initConnect();

    /**
     * @brief 根据类型更新显示。
     * 
     * @param type 对话框类型。
     */
    void updateShow(int type);

    /**
     * @brief 设置背景。
     */
    void setBackground();

    /**
     * @brief 将窗口居中显示。
     */
    void centerWindow();

    /**
     * @brief 初始化SOC按钮组。
     */
    void initSocButtonGroup();

    /**
     * @brief 初始化时间按钮组。
     */
    void initTimeButtonGroup();

    /**
     * @brief 初始化能量按钮组。
     */
    void initEnergyButtonGroup();

private slots:
    /**
     * @brief 键盘可见性改变信号槽。
     */
    void onKeyboardVisibilityChanged();

protected:
    /**
     * @brief 重写显示事件。
     * 
     * @param event 显示事件。
     */
    void showEvent(QShowEvent* event) override;

private:
    Ui::DialogChargingPopup *ui;
    QLabel* m_background;
    // 原始位置
    QPoint  m_originalPos;

    QButtonGroup* soc_btn_group;
    QButtonGroup* time_btn_group;
    QButtonGroup* energy_btn_group;
};

#endif // DIALOGCHARGINGPOPUP_H
