#include "rive/importers/file_asset_importer.hpp"
#include "rive/assets/file_asset_contents.hpp"
#include "rive/assets/file_asset.hpp"
#include "rive/file_asset_resolver.hpp"
#include "rive/span.hpp"
#include <cstdint>

using namespace rive;

FileAssetImporter::FileAssetImporter(FileAsset* fileAsset,
                                     FileAssetResolver* assetResolver) :
    m_FileAsset(fileAsset), m_FileAssetResolver(assetResolver) {}

void FileAssetImporter::loadContents(const FileAssetContents& contents) {
    auto data = contents.bytes();
    if (m_FileAsset->decode(data.begin(), data.size())) {
        m_LoadedContents = true;
    }
}

StatusCode FileAssetImporter::resolve() {
    if (!m_LoadedContents && m_FileAssetResolver != nullptr) {
        // Contents weren't available in-band, or they couldn't be decoded. Try
        // to find them out of band.
        m_FileAssetResolver->loadContents(*m_FileAsset);
    }

    // Note that it's ok for an asset to not resolve (or to resolve async).
    return StatusCode::Ok;
}
