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

#include "Subfiles/OggSubFile.h"

#include "BinaryData.h"
#include "DatFile.h"
#include "SubfileData.h"
#include "EasyLogging++/easylogging++.h"

namespace LOTRO_DAT {
    OggSubFile::OggSubFile(SubFile preinit_file) : SubFile(preinit_file) {
    }

    FILE_TYPE OggSubFile::FileType() const {
        return OGG;
    }

    std::string OggSubFile::Extension() const {
        return ".ogg";
    }

    SubfileData OggSubFile::PrepareForExport(const BinaryData &file_data) {
        if (file_data.Empty()) {
            return SubfileData();
        }

        SubfileData result;
        result.binary_data = file_data.CutData(8);
        result.options["fid"] = file_id();
        result.options["ext"] = Extension();
        return result;
    }

    BinaryData OggSubFile::MakeForImport(const BinaryData &old_data, const SubfileData &data) {
        if (!data.options["ext"] || data.options["ext"].as<std::string>() != Extension() ||
            !data.options["fid"] || data.options["fid"].as<long long>() != file_id()) {
            LOG(ERROR) << "invalid options data!";
            return BinaryData(0);
        }
        BinaryData file_size = BinaryData::FromNumber<4>(data.binary_data.size() - 8);
        BinaryData file_id = BinaryData::FromNumber<4>(this->file_id());

        return old_data.CutData(0, 8) + file_id + file_size + data.binary_data;
    }
};