cmake_minimum_required(VERSION 3.10)
project(NBGraphics VERSION 0.1)

include(GNUInstallDirs)
include(CMakePackageConfigHelpers)

set(GLAD_PATH ${NBENGINE_ROOT}/../glad/)
get_filename_component(GLAD_PATH ${GLAD_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)

if (NB_MONITOR_OPENGL_CALLS)
    add_compile_definitions(_NB_MONITOR_OPENGL_CALLS)
endif()

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)
add_dependencies(NBGraphics NBCore)
add_dependencies(NBGraphics glfw)
target_link_libraries(NBGraphics
    PUBLIC glfw
    PUBLIC NBCore    
)
target_include_directories(NBGraphics 
    PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
    PUBLIC "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
    PUBLIC "${GLAD_PATH}/include"
)
export(
    TARGETS NBGraphics
    FILE "${CMAKE_BINARY_DIR}/cmake/NBGraphicsTargets.cmake"
    NAMESPACE NBEngine::
)
configure_package_config_file(
    "NBGraphicsConfig.cmake.in"
    "${CMAKE_BINARY_DIR}/cmake/NBGraphicsConfig.cmake"
    INSTALL_DESTINATION ${CMAKE_INSTALL_PREFIX}/cmake
    PATH_VARS CMAKE_INSTALL_LIBDIR
)
write_basic_package_version_file(
    "${CMAKE_BINARY_DIR}/cmake/NBGraphicsConfigVersion.cmake"
    COMPATIBILITY AnyNewerVersion 
)


if (NBENGINE_INSTALL)
    message("Installing NBGraphics to ${CMAKE_INSTALL_PREFIX}")
    install(
        TARGETS NBGraphics  
        EXPORT NBGraphicsTargets
        LIBRARY DESTINATION lib
        ARCHIVE DESTINATION lib
        INCLUDES DESTINATION include
    )
    install(
        DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/NBGraphics"
        DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
        FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp"
    )
    install(
        EXPORT NBGraphicsTargets
        DESTINATION ${CMAKE_INSTALL_PREFIX}/cmake
        NAMESPACE NBEngine::
    )
    install(FILES
        "${CMAKE_BINARY_DIR}/cmake/NBGraphicsConfig.cmake"
        "${CMAKE_BINARY_DIR}/cmake/NBGraphicsConfigVersion.cmake"
        DESTINATION "${CMAKE_INSTALL_PREFIX}/CMake"
    )
endif()

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

