#ifndef CUSTOMCOMBOBOX_H
#define CUSTOMCOMBOBOX_H

#include <QWidget>
#include <QLabel>
#include <QToolButton>
#include <QListWidget>
#include <QVBoxLayout>
#include <QMouseEvent>

/**
 * @class CustomComboBox
 * @brief CustomComboBox 是一个自定义的下拉框控件，继承自 QWidget。
 * 
 * CustomComboBox 提供了基本的下拉框功能，包括添加选项、清除选项、获取当前选项等。
 * 它通过显示一个标签和一个箭头按钮来模拟下拉框的行为，当用户点击箭头按钮时，会弹出一个包含所有选项的列表。
 * 
 * @param parent 父控件，默认为 nullptr。
 * 
 * @note 使用 CustomComboBox 时，请确保在使用前正确初始化，并且在使用完毕后进行清理。
 * 
 * @example
 * CustomComboBox comboBox;
 * comboBox.addItem("Option 1");
 * comboBox.addItem("Option 2");
 * comboBox.setCurrentIndex(0);
 * connect(&comboBox, &CustomComboBox::currentIndexChanged, [](int index){
 *     qDebug() << "Current index changed to:" << index;
 * });
 */
class CustomComboBox : public QWidget
{
    Q_OBJECT
public:
    explicit CustomComboBox(QWidget *parent = nullptr);

    void addItem(const QString &text);
    void addItems(const QStringList &list);
    void clear();
    QString currentText() const;
    void setCurrentIndex(int index = 0);
    void setCurrentText(const QString& text);
    int currentIndex() const;
    int findText(const QString& text);
    int count();

signals:
    void currentIndexChanged(int index);
    void currentTextChanged(QString text);

protected:
    void mousePressEvent(QMouseEvent *event) override;
    void extracted(QWidget *&widget);
    bool eventFilter(QObject *obj, QEvent *event) override;
    
private slots:
    void onItemClicked(QListWidgetItem *item);

private:
    QLabel *displayLabel;
    QToolButton *arrowBtn;
    QListWidget *listWidget;
    QWidget *popupWidget;
    bool isDisplay = false;
    int m_currentIndex = -1;
};

#endif // CUSTOMCOMBOBOX_H
