#ifndef DOCTEMPLATEMANAGER_H
#define DOCTEMPLATEMANAGER_H

#include <QObject>
#include <QString>
#include <QList>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonDocument>
#include <QUuid>
#include <QFile>
#include <QTextStream>
#include <QDir>
#include "../global/kaglobal.h"

class DocTemplateManager : public QObject
{
    Q_OBJECT

public:
    static DocTemplateManager* getInstance();

    // 基本操作接口
    bool addTemplate(const DocTemplate& templateData);
    bool removeTemplate(const QString& uuid);
    bool updateTemplate(const QString& uuid, const DocTemplate& newData);
    DocTemplate getTemplate(const QString& uuid) const;
    QList<DocTemplate> getAllTemplates() const;

    // 查找接口
    QList<DocTemplate> findTemplatesByName(const QString& name) const;
    bool templateExists(const QString& uuid) const;

    // 文件操作
    bool loadFromFile(const QString& filePath = "");
    bool saveToFile(const QString& filePath = "");

    // 获取配置信息
    QString getDataFilePath() const { return m_dataFilePath; }
    QString getOutlinesDir() const { return m_outlinesDir; }
    int getTemplateCount() const { return m_templates.size(); }

signals:
    void templateAdded(const DocTemplate& newTemplate);
    void templateRemoved(const QString& uuid);
    void templateUpdated(const DocTemplate& updatedTemplate);
    void dataLoaded();
    void dataSaved();

private:
    explicit DocTemplateManager(QObject* parent = nullptr);
    ~DocTemplateManager();

    // 默认数据
    void loadInitialTemplates();

    // 禁用拷贝和赋值
    DocTemplateManager(const DocTemplateManager&) = delete;
    DocTemplateManager& operator=(const DocTemplateManager&) = delete;

    // 生成UUID
    QString generateUUID() const;

    // 处理大纲文本文件
    bool saveOutlineToFile(const QString& uuid, const QString& outlineContent);
    QString loadOutlineFromFile(const QString& filePath) const;
    bool removeOutlineFile(const QString& filePath);

    // 获取大纲文件路径
    QString getOutlineFilePath(const QString& uuid) const;

    // 成员变量
    static DocTemplateManager* m_instance;
    QList<DocTemplate> m_templates;
    QString m_dataFilePath;
    QString m_outlinesDir;
};

#endif // DOCTEMPLATEMANAGER_H
