#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:
        enum DAT_STATUS: int {
            E_INITIALISING,
            E_EXTRACTING,
            E_PATCHING,
            E_COMMITING,
            E_BACKUP_CREATING,
            E_BACKUP_RESTORING,
            E_BACKUP_REMOVING,
            E_GATHERING_INFO,
            E_FREE
        };

        DatStatus() = delete;

        DatStatus(const DatStatus &other) = delete;

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

        ~DatStatus() = default;

        explicit DatStatus(DatFile *datFilePtr);

        void SetPercentage(unsigned percent);

        unsigned GetPercentage();

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

        std::string GetDebugMessage();

        void SetStatus(DAT_STATUS status);

        DAT_STATUS GetStatus();

        bool CheckIfNotPatched();

        void ClearAll();

    private:
        DatFile *dat;
        unsigned percentage_;
        DAT_STATUS status_;

        std::string debug_message;
    };
}

#endif //LOTRO_DAT_LIBRARY_DATSTATUS_H
