cmake_minimum_required(VERSION 3.20)
project(vibe3_physics)

# Establecer el estándar de C++
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Opciones comunes de compilación
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Os -ffunction-sections -fdata-sections")

# Buscar SDL3 automáticamente
find_package(SDL3 REQUIRED)

# Si no se encuentra SDL3, generar un error
if (NOT SDL3_FOUND)
    message(FATAL_ERROR "SDL3 no encontrado. Por favor, verifica su instalación.")
endif()

# Archivos fuente (excluir main_old.cpp)
file(GLOB SOURCE_FILES source/*.cpp source/external/*.cpp source/shapes/*.cpp)
list(REMOVE_ITEM SOURCE_FILES "${CMAKE_SOURCE_DIR}/source/main_old.cpp")

# Comprobar si se encontraron archivos fuente
if(NOT SOURCE_FILES)
    message(FATAL_ERROR "No se encontraron archivos fuente en el directorio 'source/'. Verifica la ruta.")
endif()

# Detectar la plataforma y configuraciones específicas
if(WIN32)
    set(PLATFORM windows)
    set(LINK_LIBS ${SDL3_LIBRARIES} mingw32 ws2_32)
elseif(UNIX AND NOT APPLE)
    set(PLATFORM linux)
    set(LINK_LIBS ${SDL3_LIBRARIES})
elseif(APPLE)
    set(PLATFORM macos)
    set(LINK_LIBS ${SDL3_LIBRARIES})
endif()

# Incluir directorios de SDL3
include_directories(${SDL3_INCLUDE_DIRS})

# Añadir el ejecutable reutilizando el nombre del proyecto
add_executable(${PROJECT_NAME} ${SOURCE_FILES})

# Especificar la ubicación del ejecutable (en la raíz del proyecto)
set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR})

# Enlazar las bibliotecas necesarias
target_link_libraries(${PROJECT_NAME} ${LINK_LIBS})
