#ifndef CUSTOMQDATETIMEEDIT_H
#define CUSTOMQDATETIMEEDIT_H

#include <QDateTimeEdit>
#include <QObject>
#include <QWidget>

#include <QScopedPointer>
#include <QObject>

#include "settings/OtherSettings/dialog/DialogEditValue.h"

/**
 * @class CustomQDateTimeEdit
 * @brief CustomQDateTimeEdit 是一个自定义的 QDateTimeEdit 控件，它允许用户通过对话框编辑日期和时间值。
 * 
 * 这个类继承自 QDateTimeEdit，并添加了一个事件过滤器，用于在用户点击控件时显示一个对话框，让用户编辑日期和时间值。
 * 
 * @note 使用这个类时，需要确保 Qt 库已经正确安装和配置。
 * 
 * @param parent 指向父控件的指针，如果为 nullptr，则此控件没有父控件。
 * 
 * @example
 * 下面是一个简单的示例，展示了如何使用 CustomQDateTimeEdit 控件：
 * 
 * @code
 * QWidget *parentWidget = new QWidget;
 * CustomQDateTimeEdit *customDateTimeEdit = new CustomQDateTimeEdit(parentWidget);
 * customDateTimeEdit->setDateTime(QDateTime::currentDateTimeUtc());
 * @endcode
 */
class CustomQDateTimeEdit : public QDateTimeEdit
{
    Q_OBJECT
public:
    /**
     * @brief 构造函数，创建一个 CustomQDateTimeEdit 对象。
     * 
     * @param parent 指向父控件的指针，如果为 nullptr，则此控件没有父控件。
     */
    explicit CustomQDateTimeEdit(QWidget *parent = nullptr);

    /**
     * @brief 析构函数，销毁 CustomQDateTimeEdit 对象。
     */
    ~CustomQDateTimeEdit();

protected:
    /**
     * @brief 事件过滤器，用于处理自定义事件。
     * 
     * @param obj 发生事件的 QObject 对象。
     * @param event 发生的事件。
     * 
     * @return 如果事件被处理，则返回 true；否则返回 false。
     */
    bool eventFilter(QObject *obj, QEvent *event) override;

private:
    /**
     * @brief 指向一个 DialogEditValue 对象的指针，用于显示对话框编辑日期和时间值。
     */
    QScopedPointer<DialogEditValue> m_input_dialog;
};

#endif // CUSTOMQDATETIMEEDIT_H
