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

#ifndef LOTRO_DAT_PATCHER_SUBFILE_H
#define LOTRO_DAT_PATCHER_SUBFILE_H

#include <string>
#include <vector>
#include "yaml-cpp/yaml.h"

extern "C++"
{
namespace LOTRO_DAT
{
    class DatFile;
	class BinaryData;
    class Database;
    enum FILE_TYPE : int;

    class Subfile
    {
    public:
        Subfile();
        Subfile(DatFile *dat, long long fragments_count, long long unknown1, long long file_id, long long file_offset,
                                    long long file_size, long long timestamp, long long version, long long block_size);

        virtual FILE_TYPE FileType() const;
        virtual std::string Extension() const;

        virtual bool PrepareForExport(const BinaryData &file_data, long long &export_size, std::vector<BinaryData> &binary_data,
                             std::vector<std::u16string> &text_data, std::vector<YAML::Node> &options);

        virtual BinaryData MakeForImport(const BinaryData &old_data, const BinaryData &binary_data,
                                const std::u16string &text_data, const YAML::Node &options);

        long long fragments_count() const;
        long long unknown1() const;
        long long file_id() const;
        long long file_offset() const;
        long long file_size() const;
        long long timestamp() const;
        long long version() const;
        long long block_size() const;

	protected:
		DatFile *dat_;

		long long fragments_count_;
        long long unknown1_;
        long long file_id_;
        long long file_offset_;
        long long file_size_;
        long long timestamp_;
        long long version_;
        long long block_size_;
    };
}
};

#endif //LOTRO_DAT_PATCHER_SUBFILE_H