#ifndef LOTRO_DAT_LIBRARY_DATEXPORTER_H
#define LOTRO_DAT_LIBRARY_DATEXPORTER_H

#include "../DatOperationResult.h"
#include "../Database.h"

extern "C++" {
namespace LOTRO_DAT {

    enum FILE_TYPE : int;

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

    class DatExporter {
    public:
        DatExporter() = delete;

        DatExporter(const DatExporter &other) = delete;

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

        ~DatExporter() = default;

        explicit DatExporter(DatFile *datFilePtr);

        DatOperationResult<int> ExtractAllFilesByType(const FILE_TYPE &type, std::string output_directory_path);

        DatOperationResult<> ExtractFileById(long long file_id, std::string output_filename);

        DatOperationResult<int> ExtractAllFilesByType(const FILE_TYPE &type, Database *db);

        DatOperationResult<> ExtractFileById(long long file_id, Database *db);

    private:
        DatOperationResult<> WriteStringToFile(const std::u16string &str, const std::string &path);

        DatFile *dat;

    };
}
};

#endif //LOTRO_DAT_LIBRARY_DATEXPORTER_H
