#ifndef _RIVE_RELATIVE_LOCAL_ASSET_RESOLVER_HPP_
#define _RIVE_RELATIVE_LOCAL_ASSET_RESOLVER_HPP_

#include "rive/file_asset_resolver.hpp"
#include "rive/assets/file_asset.hpp"
#include <cstdio>
#include <string>

namespace rive {
    class FileAsset;
    /// An implementation of FileAssetResolver which finds the assets in a local
    /// path relative to the original .riv file looking for them.
    class RelativeLocalAssetResolver : public FileAssetResolver {
    private:
        std::string m_Path;

    public:
        RelativeLocalAssetResolver(std::string filename) {
            std::size_t finalSlash = filename.rfind('/');

            if (finalSlash != std::string::npos) {
                m_Path = filename.substr(0, finalSlash + 1);
            }
        }

        void loadContents(FileAsset& asset) override {
            std::string filename = m_Path + asset.uniqueFilename();
            FILE* fp = fopen(filename.c_str(), "rb");

            fseek(fp, 0, SEEK_END);
            const size_t length = ftell(fp);
            fseek(fp, 0, SEEK_SET);
            uint8_t* bytes = new uint8_t[length];
            if (fread(bytes, 1, length, fp) == length) {
                asset.decode(bytes, length);
            }
            delete[] bytes;
        }
    };
} // namespace rive
#endif
