#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 rive::rcp<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
