cmake_minimum_required(VERSION 3.20)
project(MarklinCommon VERSION 1.0.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# MSVC does not define M_PI by default
# WIN32_LEAN_AND_MEAN prevents winsock1/winsock2 conflict
add_compile_definitions(_USE_MATH_DEFINES WIN32_LEAN_AND_MEAN NOMINMAX)

# ── Sources ──────────────────────────────────────────────────────────────────
add_library(MarklinCommon STATIC
    geometry/SnapEngine.cpp
    io/CatalogLoader.cpp
    io/SceneryCatalog.cpp
    io/PlanXmlWriter.cpp
    io/PlanXmlReader.cpp
    model/HelixVariant.cpp
)

target_include_directories(MarklinCommon
    PUBLIC  ${CMAKE_CURRENT_SOURCE_DIR}
)

# ── wxWidgets ─────────────────────────────────────────────────────────────────
find_package(wxWidgets CONFIG QUIET COMPONENTS core base xml)
if(NOT wxWidgets_FOUND)
    find_package(wxWidgets REQUIRED COMPONENTS core base xml)
    include(${wxWidgets_USE_FILE})
else()
    message(STATUS "Found wxWidgets via config mode")
endif()

target_include_directories(MarklinCommon PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

if(TARGET wx::core)
    target_link_libraries(MarklinCommon PUBLIC wx::core wx::base wx::xml)
else()
    target_link_libraries(MarklinCommon PUBLIC ${wxWidgets_LIBRARIES})
    target_compile_definitions(MarklinCommon PUBLIC ${wxWidgets_DEFINITIONS})
endif()

# ── Install data files ────────────────────────────────────────────────────────
# Callers copy data/catalog.xml next to their executable
set(MARKLIN_CATALOG_DIR ${CMAKE_CURRENT_SOURCE_DIR}/data CACHE PATH
    "Directory containing catalog.xml")
target_compile_definitions(MarklinCommon PUBLIC
    MARKLIN_CATALOG_DIR="${MARKLIN_CATALOG_DIR}")
