cmake_minimum_required(VERSION 3.14)
project(cards)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Find required packages
find_package(Threads REQUIRED)
find_package(PkgConfig REQUIRED)

# Find PostgreSQL (libpqxx)
pkg_check_modules(PQXX REQUIRED libpqxx>=7.0.0)
pkg_check_modules(PQ REQUIRED libpq)

# Find Boost
find_package(Boost REQUIRED COMPONENTS system)

# Find nlohmann_json
find_package(nlohmann_json REQUIRED)

# Add executable
add_executable(cards
    src/main.cpp
    src/database.cpp
    src/server.cpp
)

# Include directories
target_include_directories(cards PRIVATE
    ${Boost_INCLUDE_DIRS}
    ${PQXX_INCLUDE_DIRS}
    ${PQ_INCLUDE_DIRS}
    src
)

# Link libraries
target_link_libraries(cards
    ${Boost_LIBRARIES}
    ${PQXX_LIBRARIES}
    ${PQ_LIBRARIES}
    Threads::Threads
    nlohmann_json::nlohmann_json
)

# For Windows, add ws2_32 and crypt32
if(WIN32)
    target_link_libraries(cards ws2_32 crypt32)
endif()

# Compiler flags
target_compile_definitions(cards PRIVATE BOOST_ALL_NO_LIB)

# Set properties
set_target_properties(cards PROPERTIES
    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)

# ─── Install ──────────────────────────────────────────────────────────
install(TARGETS cards DESTINATION /usr/bin)

install(FILES deploy/systemd/cards.service DESTINATION /usr/lib/systemd/system)

install(FILES deploy/config/cards.json.example DESTINATION /etc/cards)

install(FILES LICENSE DESTINATION /usr/share/doc/cards)

# ─── Packaging (CPack) ────────────────────────────────────────────────
set(CPACK_PACKAGE_NAME          "cards")
set(CPACK_PACKAGE_VERSION       "1.0.1")
set(CPACK_PACKAGE_VENDOR        "cards")
set(CPACK_PACKAGE_MAINTAINER    "adwet")
set(CPACK_PACKAGE_CONTACT       "adwet@yandex.ru")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Cards web server")
set(CPACK_PACKAGE_DESCRIPTION   "A simple C++20 web server powered by Boost.Beast and PostgreSQL")
set(CPACK_PACKAGE_SECTION       "web")
set(CPACK_DEBIAN_PACKAGE_SECTION "web")
set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")

set(CPACK_DEBIAN_PACKAGE_DEPENDS
    "libpqxx-7.10, libpq5 (>= 13), libstdc++6 (>= 10), libgcc-s1, libboost-system1.83.0"
)

set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
    "${CMAKE_SOURCE_DIR}/deploy/deb/postinst"
    "${CMAKE_SOURCE_DIR}/deploy/deb/prerm"
)

set(CPACK_DEBIAN_FILE_NAME      "cards-${CPACK_PACKAGE_VERSION}-Linux.deb")
set(CPACK_GENERATOR             "DEB")

include(CPack)

