#ifndef DIALOGLIMITEDIT_H
#define DIALOGLIMITEDIT_H

#include <QDialog>
#include <QLabel>

namespace Ui {
class DialogLimitEdit;
}

struct Limit {
    int startPeriod;
    QString unit;
    int limit;
};

namespace DurationUnit {
constexpr const int HOURS   = 0x0;
constexpr const int MINUTES = 0x1;
constexpr const int SECONDS = 0x2;
}
namespace StartPeriodUnit {
constexpr const int UTC_STR = 0x0;
constexpr const int SECONDS = 0x1;
}

/**
 * @class DialogLimitEdit
 * @brief DialogLimitEdit 类是一个基于 QDialog 的对话框，用于显示和编辑限制信息。
 * 
 * 该类提供了显示限制信息的功能，并允许用户进行编辑。它继承自 QDialog，并使用 Qt 的 UI 设计器生成的 UI 类。
 * 
 * 核心功能包括：
 * - 显示限制信息
 * - 编辑限制信息
 * - 初始化对话框组件
 * - 连接信号和槽
 * - 设置背景和居中窗口
 * 
 * @param parent 指向父窗口的指针，默认为 nullptr。
 * 
 * 使用示例：
 * @code
 * DialogLimitEdit dialog(this);
 * dialog.setLimit_info(someLimit);
 * dialog.exec();
 * @endcode
 * 
 * 注意事项：
 * - 在使用该类之前，请确保已经正确初始化了 UI 设计器生成的对象。
 * - 该类没有特殊的使用限制或潜在的副作用。
 */
class DialogLimitEdit : public QDialog
{
    Q_OBJECT

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

    /**
     * @brief 获取当前的限制信息。
     * 
     * @return 当前限制信息的 Limit 对象。
     */
    Limit limit_info();
    
    /**
     * @brief 设置新的限制信息。
     * 
     * @param newLimit_info 新的限制信息。
     */
    void setLimit_info(const Limit &newLimit_info);

    void clear();

private:
    /**
     * @brief 初始化对话框组件。
     */
    void initWidget();
    
    /**
     * @brief 连接信号和槽。
     */
    void initConnect();
    
    /**
     * @brief 设置对话框背景。
     */
    void setBackground();
    
    /**
     * @brief 将对话框居中显示。
     */
    void centerWindow();

    /**
     * @brief 刷新数据。
     */
    void refreshData();
    void setDuration();
    
    /**
     * @brief 更新数据。
     */
    void updateData();
    int getDuration();

protected:
    /**
     * @brief 重写 showEvent，在对话框显示时执行特定操作。
     * 
     * @param event 显示事件。
     */
    void showEvent(QShowEvent* event) override;

private:
    /**
     * @brief 指向 UI 设计器生成的 UI 类的指针。
     */
    Ui::DialogLimitEdit *ui;
    
    /**
     * @brief 背景标签。
     */
    QLabel* m_background;
    
    /**
     * @brief 原始位置。
     */
    QPoint  m_originalPos;

    /**
     * @brief 当前限制信息。
     */
    Limit m_limit_info;
};

#endif // DIALOGLIMITEDIT_H
