cmake_minimum_required(VERSION 3.28)

project(immich-sync VERSION 0.1.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_AUTOMOC ON)

find_package(Qt6 6.9 REQUIRED COMPONENTS Core Network HttpServer WebSockets)

qt_add_executable(immich-sync
    src/main.cpp
    src/Application.cpp
    src/Application.h
    src/ImmichClient.cpp
    src/ImmichClient.h
    src/SyncSession.cpp
    src/SyncSession.h
    src/Types.cpp
    src/Types.h
)

qt_add_resources(immich-sync "webapp"
    PREFIX "/web"
    FILES
        web/index.html
        web/app.js
        web/styles.css
)

target_link_libraries(immich-sync PRIVATE
    Qt6::Core
    Qt6::Network
    Qt6::HttpServer
    Qt6::WebSockets
)

target_compile_definitions(immich-sync PRIVATE
    IMMICH_SYNC_VERSION="${PROJECT_VERSION}"
    QT_NO_CAST_FROM_ASCII
    QT_NO_CAST_TO_ASCII
)

target_compile_options(immich-sync PRIVATE
    $<$<CXX_COMPILER_ID:GNU,Clang>:-Wall -Wextra -Wpedantic -Wconversion -Wshadow>
)

include(GNUInstallDirs)
install(TARGETS immich-sync RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})

include(CTest)
if(BUILD_TESTING)
    find_package(Qt6 6.9 REQUIRED COMPONENTS Test)
    qt_add_executable(immich-sync-tests
        tests/TypesTest.cpp
        src/Types.cpp
        src/Types.h
    )
    target_include_directories(immich-sync-tests PRIVATE src)
    target_link_libraries(immich-sync-tests PRIVATE Qt6::Core Qt6::Network Qt6::Test)
    target_compile_definitions(immich-sync-tests PRIVATE QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII)
    add_test(NAME immich-sync-types COMMAND immich-sync-tests)
endif()
