#ifndef DOCSUPDATER_H
#define DOCSUPDATER_H

#include <QObject>
#include "updatecontroller.h"
#include "module.h"

class DocsUpdater : public QObject
{
    Q_OBJECT

public:
    DocsUpdater(UpdateController* updateController, QObject *parent = nullptr);
    ~DocsUpdater();
public:
    void lockAccessToDocsXML();
    void unLockAccessToDocsXML();

    QList<SubProc> getListSubProcForDMcode(QString dmCode);    

    bool updateDocsXML();

private:
    void domElementParserAMM(QDomElement element, Module* moduleParent);
    void deleteAllModulsAMM();    
    bool processingScenXML(const QString dmCode, QString& canplay, QList<SubProc>& listSubProc);
    void selectSubProc(QDomElement& modeElement, QList<SubProc>& listSubProc);
    DM* getDMmoduleByDMcode(QString dmCode);

private:
    UpdateController* updateController;

    QMutex mtxAccess;

    bool flagStop;
    QList<Module*> listAllModulesAMM; //?
    QList<TaskAmmFim> listTasksAMM; //?

    QMap<QString, DM*> DMmodulesMap; //общий (линейный) словарь всех DM-модулей

    QMap<QString, QList<SubProc>> listSubProcMap; //словарь подпроцедур для всех DM-модулей
};

#endif // DOCSUPDATER_H
