cmake_minimum_required(VERSION 3.20)
project(YourPartDaemon VERSION 1.0 LANGUAGES CXX)

# C++ Standard and Compiler Settings
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Explicitly set compiler versions for Tumbleweed
set(CMAKE_C_COMPILER gcc-15)
set(CMAKE_CXX_COMPILER g++-15)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto=auto")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -flto")
set(CMAKE_BUILD_TYPE Debug)

# Include /usr/local if needed
list(APPEND CMAKE_PREFIX_PATH /usr/local)

# Find libwebsockets via pkg-config
find_package(PkgConfig REQUIRED)
pkg_check_modules(LWS REQUIRED libwebsockets)

# Find other dependencies
find_package(PostgreSQL REQUIRED)
find_package(Threads REQUIRED)
find_package(nlohmann_json CONFIG REQUIRED)

# PostgreSQL C++ libpqxx
find_package(PkgConfig REQUIRED)
pkg_check_modules(LIBPQXX REQUIRED libpqxx)

# Project sources and headers
set(SOURCES
    src/main.cpp
    src/config.cpp
    src/connection_pool.cpp
    src/database.cpp
    src/character_creation_worker.cpp
    src/produce_worker.cpp
    src/message_broker.cpp
    src/websocket_server.cpp
    src/stockagemanager.cpp
    src/director_worker.cpp
    src/valuerecalculationworker.cpp
    src/usercharacterworker.cpp
    src/houseworker.cpp
    src/politics_worker.cpp
)

set(HEADERS
    src/config.h
    src/database.h
    src/connection_pool.h
    src/worker.h
    src/character_creation_worker.h
    src/produce_worker.h
    src/message_broker.h
    src/websocket_server.h
    src/stockagemanager.h
    src/director_worker.h
    src/valuerecalculationworker.h
    src/usercharacterworker.h
    src/houseworker.h
    src/politics_worker.h
)

# Define executable target
add_executable(yourpart-daemon ${SOURCES} ${HEADERS}
  src/utils.h src/utils.cpp
  src/underground_worker.h src/underground_worker.cpp)

# Include directories
target_include_directories(yourpart-daemon PRIVATE
  ${PostgreSQL_INCLUDE_DIRS}
  ${LIBPQXX_INCLUDE_DIRS}
  ${LWS_INCLUDE_DIRS}
)

# Link libraries
target_link_libraries(yourpart-daemon PRIVATE
  ${PostgreSQL_LIBRARIES}
  Threads::Threads
  z ssl crypto
  ${LIBPQXX_LIBRARIES}
  ${LWS_LIBRARIES}
  nlohmann_json::nlohmann_json
)

# Installation rules
install(TARGETS yourpart-daemon DESTINATION /usr/local/bin)
install(FILES daemon.conf DESTINATION /etc/yourpart/)
