//
// Created by Иван_Архипов on 31.10.2017.
//

#ifndef LOTRO_DAT_PATCHER_DATFILE_H
#define LOTRO_DAT_PATCHER_DATFILE_H

#ifdef LOTRO_DAT_EXPORTS
#define LOTRO_DAT_API __declspec(dllexport)
#else
#define LOTRO_DAT_API __declspec(dllimport)
#endif

#include <bits/unique_ptr.h>
#include "DatSubsystems/DatBackupManager.h"
#include "DatSubsystems/DatExporter.h"
#include "DatSubsystems/DatFileSystem.h"
#include "DatSubsystems/DatIO.h"
#include "DatSubsystems/DatLocaleManager.h"
#include "DatSubsystems/DatPatcher.h"

// Dat file names definitions

extern "C++"
{
namespace LOTRO_DAT {
    enum FILE_TYPE : int {
        TEXT,
        JPG,
        DDS,
        WAV,
        OGG,
        FONT,
        UNKNOWN
    };

    class DatFile {
        friend class DatIO;
        friend class DatFileSystem;
        friend class DatLocaleManager;
        friend class DatPatcher;
        friend class DatExporter;
        friend class DatBackupManager;

    public:
        DatFile();
        DatFile(const DatFile &other) = delete;
        DatFile(DatFile &&other) = default;
        DatFile &operator=(const DatFile &other) = delete;
        DatFile &operator=(DatFile &&other) = default;

        DatLocaleManager &getLocaleManager();
        DatExporter &getExporter();
        DatPatcher &getPatcher();
        DatBackupManager &getBackupManager();
        DatIO &getIO();
        DatFileSystem &getFileSystem();

    private:
        std::unique_ptr<DatIO> io_;
        std::unique_ptr<DatFileSystem> fileSystem_;
        std::unique_ptr<DatLocaleManager> localeManager_;
        std::unique_ptr<DatPatcher> patcher_;
        std::unique_ptr<DatExporter> exporter_;
        std::unique_ptr<DatBackupManager> backupManager_;
    };
}
}

#endif //LOTRO_DAT_PATCHER_DATFILE_H