#ifndef ARC_GRAPHICS_RENDERER_H_
#define ARC_GRAPHICS_RENDERER_H_

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief predefien ARC_EngineData so as not to get circular reference
*/
typedef struct ARC_EngineData ARC_EngineData;

/**
 * @note ARC_RendererType is determined by which window library you are using
*/
typedef struct ARC_RendererType ARC_Renderer;

/**
 * @brief creates ARC_Renderer type with ARC_EngineData
 *
 * @note the parameter data is determined by which graphics library you are using
 *       please refer to the graphics library section to see what needs to be passed
 *
 * @param renderer ARC_Renderer to initialize
 * @param data     the engine data to create from
 */
void ARC_Renderer_CreateWithEngineData(ARC_Renderer **renderer, ARC_EngineData *data);

/**
 * @brief destroys ARC_Renderer type
 *
 * @param renderer ARC_Renderer to destory
 */
void ARC_Renderer_Destroy(ARC_Renderer *renderer);

/**
 * @breif clears the renderer
 *
 * @param renderer the renderer to clear
*/
void ARC_Renderer_Clear(ARC_Renderer *renderer);

/**
 * @brief renders the renderer
 *
 * @note the renderer will most likely be drawn to from ARC_EngineData
 *
 * @param renderer the renderer to render
*/
void ARC_Renderer_Render(ARC_Renderer *renderer);

#ifdef __cplusplus
}
#endif

#endif // !ARC_GRAPHICS_RENDERER_H_
