#pragma once

#include "Core/Constant.h"

class GLHandleMapper {
public:
    static uint32 GeneratorVAOHandle();
    static uint32 GeneratorVBOHandle();
    static uint32 GeneratorEBOHandle();
    static uint32 GeneratorShaderHandle();
    static uint32 GeneratorProgramHandle();

    static void MapVAOHandle(uint32 vaoHandle, uint32 vao);
    static uint32 GetVAO(uint32 vaoHandle);
    static void UnmapVAOHandle(uint32 vaoHandle);

    static void MapVBOHandle(uint32 vboHandle, uint32 vbo);
    static uint32 GetVBO(uint32 vboHandle);
    static void UnmapVBOHandle(uint32 vboHandle);

    static void MapEBOHandle(uint32 eboHandle, uint32 ebo);
    static uint32 GetEBO(uint32 eboHandle);
    static void UnmapEBOHandle(uint32 eboHandle);

    static void MapShaderHandle(uint32 shaderHandle, uint32 shader);
    static uint32 GetShader(uint32 shaderHandle);
    static void UnmapShaderHandle(uint32 shaderHandle);

    static void MapProgramHandle(uint32 programHandle, uint32 program);
    static uint32 GetProgram(uint32 programHandle);
    static void UnmapProgramHandle(uint32 programHandle);
};