#ifndef LOTRO_DAT_LIBRARY_DATSTATUS_H
#define LOTRO_DAT_LIBRARY_DATSTATUS_H

#include <string>

namespace LOTRO_DAT {
    class DatFile;

    /*!
     * \brief Модуль статуса dat-файла
     * \author Gi1dor
     * \date 06.07.2018
     *
     * Класс для хранения информации о выполняемых процессах в dat-файле. Позволяет отслеживать прогресс выполнения
     * во время операций создания резервных копий, применения патчей или извлечения файлов
     *
     * \warning Объекты этого класса не должны создаваться отдельно! Созданием и управлением ими занимается класс DatFile
     */

    class DatStatus {
    public:
        DatStatus() = delete;

        DatStatus(const DatStatus &other) = delete;

        DatStatus &operator=(const DatStatus &other) = delete;

        ~DatStatus() = default;

        explicit DatStatus(DatFile *datFilePtr);

        void UpdatePercentage(unsigned percent);

        unsigned GetPercentage();

        void UpdateStatusText(const std::string &message);

        void RemoveStatusText();

        std::string GetStatusText();

        void UpdateAdditionalMessage(const std::string &message);

        void RemoveAdditionalMessage();

        std::string GetAdditionalMessage();

        bool CheckIfNotPatched();

        void ClearAll();

    private:
        DatFile *dat;
        unsigned percentage;
        std::string status_text;
        std::string additional_message;
    };
}

#endif //LOTRO_DAT_LIBRARY_DATSTATUS_H