#ifndef _PIUMA_ASSETS_H_
#define _PIUMA_ASSETS_H_

#include "lib/types.h"
#include "render/render.h"
#include "platform.h"


struct asset_manager
{
	r_shader   **shaders;
	u32 shaders_count;

	r_mesh     **models;
	u32 models_count;

	r_texture  **textures;
	u32 textures_count;

	r_material **materials;
	u32 materials_count;

	r_object   **objects;
	u32 objects_count;

	void **allocations;
	u32 allocations_count;
};


// @TODO: return pointer to loaded asset, instead of copying data into *result
bool assets_load_object_obj(asset_manager *am, const char *filename, r_object *result); // Models, textures, materials get inserted in the gamestate arrays
bool assets_load_object_gltf(asset_manager *am, const char *filename, r_object *result);
bool assets_load_audio(asset_manager *am, const char *name, p_audio_buffer *result);
bool assets_load_cubemap(asset_manager *am, const char *px, const char *nx, const char *py, const char *ny, const char *pz, const char *nz, r_cubemap *result);


void assets_init(asset_manager *am);
void assets_free(asset_manager *am);

r_shader   *assets_new_shaders  (asset_manager *am, u32 count);
r_mesh     *assets_new_models   (asset_manager *am, u32 count);
r_texture  *assets_new_textures (asset_manager *am, u32 count);
r_material *assets_new_materials(asset_manager *am, u32 count);
r_object   *assets_new_objects  (asset_manager *am, u32 count);

// @Feature: remove/free single assets

#endif
