#ifndef TAGLISTMODEL_H
#define TAGLISTMODEL_H

#include <QAbstractListModel>  // 包含QAbstractListModel类的头文件，QAbstractListModel是Qt中用于实现自定义列表模型的基类
#include <QSet>  // 包含QSet类的头文件，QSet是一个集合容器，用于存储不重复的元素
#include "tagdata.h"

class TagPool;
// 定义TagListModel类，继承自QAbstractListModel
class TagListModel : public QAbstractListModel
{
    Q_OBJECT // 宏，用于支持信号和槽机制
            public :
        // 定义角色枚举，用于指定数据模型中的不同角色
        enum TagListRoles {
            IdRole = Qt::UserRole + 1,
            NameRole,
            ColorRole
        };

    // 构造函数，允许传入父对象指针，默认为空
    TagListModel(QObject *parent = nullptr);

    // 设置标签池的函数，接受一个TagPool指针
    void setTagPool(TagPool *tagPool);

    // 设置模型数据的函数，接受一个QSet<int>类型的集合
    void setModelData(const QSet<int> &data);

    // 添加标签的函数，接受一个标签ID
    void addTag(int tagId);

    // 重载rowCount函数，返回模型的行数
    int rowCount(const QModelIndex &parent = QModelIndex()) const;

    // 重载data函数，返回指定索引和角色的数据
    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;

private:
    TagPool *m_tagPool; // 私有成员变量，用于存储标签池指针
    QVector<TagData> m_data; // 私有成员变量，用于存储标签数据的向量
    QSet<int> m_ids; // 私有成员变量，用于存储标签ID的集合

    // 更新标签数据的函数
    void updateTagData();
};

#endif // TAGLISTMODEL_H
