#ifndef __LOADER__
#define __LOADER__

#include <vector>
#include "mesh_loader.h"
#include "texture_loader.h"

namespace sleek
{
    namespace loader
    {
        class loader : public std::enable_shared_from_this<loader>
        {
            public:
                loader(std::shared_ptr<io::filesystem>);
                virtual ~loader();

                inline std::shared_ptr<loader> getptr() noexcept
                {
                    return shared_from_this();
                }

                virtual std::shared_ptr<driver::MeshBuffer> loadMesh(const std::string&) const noexcept;
                virtual std::shared_ptr<driver::texture>    loadTexture(const std::string&) const noexcept;

                virtual bool writeMesh(std::shared_ptr<driver::MeshBuffer>, const std::string&) const noexcept;
                virtual bool writeTexture(std::shared_ptr<driver::texture>, const std::string&) const noexcept;
            public:
                std::shared_ptr<io::filesystem> fs;
                std::vector<textureloader*> texture;
                std::vector<meshloader*> mesh;
        };
    }
}

#endif // __LOADER__