cmake_minimum_required(VERSION 3.10)
project(NBGraphics VERSION 0.1)

set(GLAD_PATH ${NBENGINE_ROOT}/../glad/)
set(STBIMAGE_PATH ${NBENGINE_ROOT}/../stbi_image)
get_filename_component(GLAD_PATH ${GLAD_PATH} ABSOLUTE)
get_filename_component(STBIMAGE_PATH ${STBIMAGE_PATH} ABSOLUTE)

set(CMAKE_PREFIX_PATH
    "${CMAKE_PREFIX_PATH}"
    "C:/Program Files (x86)/GLFW/lib/cmake/glfw3/"    
)
find_package(OpenGL REQUIRED)
find_package(glfw3 REQUIRED)

set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
if (NB_BUILD_TESTS)
    set(GLFW_BUILD_TESTS ON CACHE BOOL "" FORCE)
else()
    set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
endif()
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)

toAbsolutePath(NB_GRAPHICS_SOURCE
    ./src/Buffers.cpp
    ./src/FrameBuffers.cpp
    ./src/Image.cpp
    ./src/OGLObjects.cpp
    ./src/ProgramPipeline.cpp
    ./src/Textures.cpp
    ./src/VertexArray.cpp
    ./src/Window.cpp
)
toAbsolutePath(NB_GRAPHICS_INCLUDE
    ./include/NBGraphics/Buffers.hpp
    ./include/NBGraphics/Camera.hpp
    ./include/NBGraphics/Draw.hpp
    ./include/NBGraphics/FrameBuffers.hpp
    ./include/NBGraphics/GLLoad.hpp
    ./include/NBGraphics/Image.hpp
    ./include/NBGraphics/OGLObjects.hpp
    ./include/NBGraphics/ProgramPipeline.hpp
    ./include/NBGraphics/Textures.hpp
    ./include/NBGraphics/VertexArray.hpp
    ./include/NBGraphics/Window.hpp
)

set(NB_GRAPHICS_SOURCE ${NB_GRAPHICS_SOURCE} PARENT_SCOPE)
set(NB_GRAPHICS_INCLUDE ${NB_GRAPHICS_INCLUDE} PARENT_SCOPE)

add_library(NBGraphics 
    ${NB_GRAPHICS_SOURCE}
    ${GLAD_PATH}/src/glad.c
)
add_library(NBEngine::Graphics ALIAS NBGraphics)
target_link_libraries(NBGraphics
    PUBLIC glfw
    PUBLIC NBCore    
)
get_target_property(GLFW_INTERFACE_INCLUDES glfw INTERFACE_INCLUDE_DIRECTORIES)
#include_directories(${GLFW_INTERFACE_INCLUDES})
target_include_directories(NBGraphics 
    PUBLIC "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>"
    PUBLIC "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
    PUBLIC "${STBIMAGE_PATH}"
    PUBLIC "${GLAD_PATH}/include"
)

if (NBENGINE_INSTALL)
    message("Installing NBGraphics to ${CMAKE_INSTALL_PREFIX}")
    include(GNUInstallDirs)
    include(CMakePackageConfigHelpers)
    install(
        TARGETS NBGraphics
        EXPORT NBGraphicsTargets
    )
    install(
        DIRECTORY "${PROJECT_SOURCE_DIR}/include/NBGraphics"
        DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
        FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp"
    )
    install(
        EXPORT NBGraphicsTargets
        DESTINATION ${CMAKE_INSTALL_PREFIX}/cmake
        NAMESPACE NBEngine::
    )
    configure_package_config_file(
        "NBGraphicsConfig.cmake.in"
        "NBGraphicsConfig.cmake"
        INSTALL_DESTINATION ${CMAKE_INSTALL_PREFIX}/cmake
        PATH_VARS CMAKE_INSTALL_LIBDIR
    )
    write_basic_package_version_file(
        "${CMAKE_CURRENT_BINARY_DIR}/NBGraphicsConfigVersion.cmake"
        COMPATIBILITY AnyNewerVersion 
    )
    install(FILES
        "${CMAKE_CURRENT_BINARY_DIR}/NBGraphicsConfig.cmake"
        "${CMAKE_CURRENT_BINARY_DIR}/NBGraphicsConfigVersion.cmake"
        DESTINATION "${CMAKE_INSTALL_PREFIX}/cmake"
    )
endif()

if (NB_BUILD_TESTS)
    add_subdirectory(./tests)
endif()

