#ifndef XMLTRACKBALLCONFIGREADER_H
#define XMLTRACKBALLCONFIGREADER_H

#include <QObject>
#include <QtXml>

#include "logger/Logger.h"
#include "model/csm/core/trackballComponent/TrackballItem.h"

/*****************************************************************************/
/**
 * @brief
 * @author Mohammad Mohsen Talaie
 * @details
 * @date 13 JAN 2021
 */
/*****************************************************************************/
class XmlTrackballConfigReader
{
private:
    inline void handleError(ESeverityLevel::eSeverityLevel severityLevel,
                            ELogID::eLogID logID,
                            QString logText,
                            bool emitThrow = true) const;

    QDomDocument _xmlDoc;
    QString _xmlAddress;
    QDomElement _root;
    QDomElement _trackball;
    QList<QDomElement> _trackballItems;

public:
    XmlTrackballConfigReader(QString address);

    QDomElement getTrackball();
    QList<QDomElement> getTrackballItems();

    static QDomElement getChildElement(const QDomElement fatherElement, const QString elementName);
    static QList<QDomElement> getChildrenElemets(const QDomElement fatherElement,
                                                 const QString elementsName);
    static QString getElementAttribute(const QDomElement element, const QString attributeName);
    static bool getElementBooleanAttribute(QDomElement element, QString bollAttrName);
    static void initTrackballItem(TrackballItem* tbItem, const QDomElement itemElement);
    static void initTrackballItems(QList<TrackballItem*> trackballItems,
                                   const QDomElement trackballElement);
    static TrackballItem* findItem(const QList<TrackballItem*> trackballItems, const QString name);
};

#endif //XMLTRACKBALLCONFIGREADER_H