#ifndef _RIVE_FILE_READER_HPP_
#define _RIVE_FILE_READER_HPP_

#include <rive/file.hpp>

#include "rive_testing.hpp"
#include "utils/no_op_factory.hpp"

static rive::NoOpFactory gNoOpFactory;

static inline std::vector<uint8_t> ReadFile(const char path[])
{
    FILE* fp = fopen(path, "rb");
    REQUIRE(fp != nullptr);

    fseek(fp, 0, SEEK_END);
    const size_t length = ftell(fp);
    fseek(fp, 0, SEEK_SET);
    std::vector<uint8_t> bytes(length);
    REQUIRE(fread(bytes.data(), 1, length, fp) == length);
    fclose(fp);

    return bytes;
}

static inline std::unique_ptr<rive::File> ReadRiveFile(
    const char path[],
    rive::Factory* factory = nullptr,
    rive::FileAssetLoader* loader = nullptr,
    bool loadInBandAssets = true)
{
    if (!factory)
    {
        factory = &gNoOpFactory;
    }

    std::vector<uint8_t> bytes = ReadFile(path);

    rive::ImportResult result;
    auto file = rive::File::import(bytes, factory, &result, loader);
    REQUIRE(result == rive::ImportResult::success);
    REQUIRE(file.get() != nullptr);
    REQUIRE(file->artboard() != nullptr);

    return file;
}

#endif
