find_package(PkgConfig REQUIRED)
find_package(KylinAiEngine REQUIRED)

set(encryption_SOURCES
    ../src/encryption/rsa2048.cpp
    ../src/encryption/pbkdf2.cpp
    ../src/encryption/aes256.cpp
    ../src/encryption/encryption.cpp
)

set(cpr_SOURCES
    ../src/services/threadpool/singleton.h
    ../src/services/threadpool/async.h
    ../src/services/threadpool/async.cpp
    ../src/services/threadpool/threadpool.cpp
)

set(engine_SOURCES
    ../src/engine/aienginepluginmanager.cpp
    ../src/engine/library.cpp
)

set(config_SOURCES
    ../src/config/engineconfiguration.cpp
    ../src/config/prompttemplate.cpp
)

add_executable(testencryption
    testencryption.cpp
    ${encryption_SOURCES}
)
target_link_libraries(testencryption crypto ${OPENSSL_LIBRARIES})
add_test(NAME testencryption COMMAND testencryption)

add_executable(testaes256
    testaes256.cpp
    ../src/encryption/aes256.cpp
)
include_directories(../src/encryption)
target_link_libraries(testaes256 crypto ${OPENSSL_LIBRARIES})
add_test(NAME testaes256 COMMAND testaes256)

include(../cmake/engine-plugin-path-defs.cmake)
include_directories(../ai-engine)
configure_file(16k.pcm ${CMAKE_CURRENT_BINARY_DIR}/16k.pcm COPYONLY)
add_executable(testenginemanager
    ../src/engine/aienginepluginmanager.cpp
    ../src/utils/library.cpp
    ../src/utils/logger.cpp
    testenginemanager.cpp
)
target_link_libraries(testenginemanager dl ${OPENSSL_LIBRARIES} ${GIO_LIBRARIES})
add_test(NAME testenginemanager COMMAND testenginemanager)

add_executable(testmodelstatustracker
    ../src/services/modelconfig/modelstatustracker.cpp
    testmodelstatustracker.cpp
)
add_test(NAME testmodelstatustracker COMMAND testmodelstatustracker)
target_link_libraries(testmodelstatustracker pthread)

include_directories(${JSON_INCLUDE_DIRS})
include_directories(${GIO_INCLUDE_DIRS})
pkg_check_modules(GIO REQUIRED gio-unix-2.0)
add_executable(testsystemoperation
    ../src/services/assistant/intentdialoguemanager/systemoperation/systemoperation.cpp
    ../src/services/assistant/intentdialoguemanager/systemoperation/systemoperation.h
    ../src/services/assistant/intentdialoguemanager/systemoperation/systemoperationinterface.h
    ../src/services/assistant/message.cpp
    ../src/services/assistant/message.h
    ../src/services/assistant/error.cpp
    ../src/services/assistant/error.h
    ../src/APIs/apiplatform.h
    ../src/APIs/apiplatform.cpp
    ../src/APIs/systemapi.cpp
    ../src/APIs/systemapi.h
    ../src/APIs/systemapidbusmap.cpp
    ../src/APIs/systemapidbusmap.h
    ../src/applicationInfos/applicationinfos.h
    ../src/applicationInfos/applicationinfos.cpp
    ../src/utils/logger.cpp
    ../src/utils/logger.h
    ../src/utils/util.h
    ../src/utils/util.cpp
    testsystemoperation.cpp
)
add_test(NAME testsystemoperation COMMAND testsystemoperation)
target_link_libraries(testsystemoperation
    pthread
    ${JSON_LIBRARIES}
    ${OPENSSL_LIBRARIES}
    ${GIO_LIBRARIES}
    spdlog::spdlog
    jsoncpp
)