#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,
                                     Factory* factory) :
    m_FileAsset(fileAsset), m_FileAssetResolver(assetResolver), m_Factory(factory)
{}

void FileAssetImporter::loadContents(std::unique_ptr<FileAssetContents> contents)
{
    // we should only ever be called once
    assert(!m_Content);
    m_Content = std::move(contents);

    auto data = m_Content->bytes();
    if (m_FileAsset->decode(data, m_Factory))
    {
        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;
}
