cmake_minimum_required(VERSION 3.16)
project(pydaasiot LANGUAGES CXX)

# --- Python / pybind11 ------------------------------------------------------
find_package(pybind11 REQUIRED)  # richiede un config-package di pybind11
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

# --- Percorsi locali della LibDaaS precompilata -----------------------------
# Layout atteso (puoi cambiarlo via -D):
#   <DAAS_ROOT>/
#      include/         <-- headers di libdaas
#      lib/libdaas.a    <-- archivio statico precompilato
set(DAAS_ROOT         "${CMAKE_SOURCE_DIR}" CACHE PATH "Root with include/ and lib/")
set(DAAS_INCLUDE_DIR  "${DAAS_ROOT}/include"              CACHE PATH "Path to libdaas headers")
set(DAAS_LIBRARY_FILE "${DAAS_ROOT}/lib/libdaas.a"        CACHE FILEPATH "Path to libdaas.a")

if(NOT EXISTS "${DAAS_INCLUDE_DIR}")
  message(FATAL_ERROR "[LibDaaS] include/ non trovato: ${DAAS_INCLUDE_DIR}")
endif()
if(NOT EXISTS "${DAAS_LIBRARY_FILE}")
  message(FATAL_ERROR "[LibDaaS] libdaas.a non trovato: ${DAAS_LIBRARY_FILE}")
endif()

# Target IMPORTED per la lib statica precompilata
add_library(daaslib::prebuilt STATIC IMPORTED GLOBAL)
#add_compile_options(-stdlib=libc++)
set_target_properties(daaslib::prebuilt PROPERTIES
  IMPORTED_LOCATION             "${DAAS_LIBRARY_FILE}"
  INTERFACE_INCLUDE_DIRECTORIES "${DAAS_INCLUDE_DIR}"
)

# --- Modulo Python (pybind11) ----------------------------------------------
pybind11_add_module(pydaasiot
  src/pydaasiot.cpp
  src/daaswrapper.cpp
  src/net_utils.cpp
)

# Header locali del wrapper + terze parti del progetto
target_include_directories(pydaasiot
  PRIVATE
    "${CMAKE_CURRENT_SOURCE_DIR}/include"
    "${CMAKE_CURRENT_SOURCE_DIR}/third-parties"
)

# Dipendenze di sistema (Linux)
find_library(PTHREAD_LIB pthread)
find_library(BLUETOOTH_LIB bluetooth)

target_link_libraries(pydaasiot
  PRIVATE
    daaslib::prebuilt
)

if(PTHREAD_LIB)
  target_link_libraries(pydaasiot PRIVATE "${PTHREAD_LIB}")
else()
  message(WARNING "pthread non trovato: il link potrebbe fallire su alcune distro")
endif()

if(BLUETOOTH_LIB)
  target_link_libraries(pydaasiot PRIVATE "${BLUETOOTH_LIB}")
else()
  message(WARNING "bluetooth non trovato: installa libbluetooth-dev (o equivalente) se serve")
endif()

# --- (Opzionale) Doxygen ----------------------------------------------------
find_package(Doxygen QUIET)
if(DOXYGEN_FOUND AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile")
  set(DOXYFILE_IN "${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile")
  set(DOXYFILE_OUT "${CMAKE_CURRENT_BINARY_DIR}/Doxyfile")
  configure_file("${DOXYFILE_IN}" "${DOXYFILE_OUT}" @ONLY)
  add_custom_target(doc_doxygen
    COMMAND "${DOXYGEN_EXECUTABLE}" "${DOXYFILE_OUT}"
    WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
    COMMENT "Generating API documentation with Doxygen"
    VERBATIM
  )
endif()

install(
    TARGETS pydaasiot
    LIBRARY DESTINATION .
    RUNTIME DESTINATION .
)

