cmake_minimum_required(VERSION 3.26)

project(FindCalligraphers LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)

find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
find_package(Python REQUIRED COMPONENTS Development NumPy)

# utils to copy file to runtime directory
function(add_copy_files target_name)
    cmake_parse_arguments(_ARG "" "DESTINATION" "" ${ARGN})
    set(files ${_ARG_UNPARSED_ARGUMENTS})
    set(destination ${_ARG_DESTINATION})

    add_custom_target(${target_name} ALL
        COMMAND "${CMAKE_COMMAND}" -E copy ${files} "${destination}"
        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
    )
endfunction()

# target defination
# -----------------
add_executable(FindCalligraphers WIN32
    src/main.cpp
    src/main_window.cpp
    src/calligraphy_process.cpp
    src/aboug_dialog.cpp
)
target_include_directories(FindCalligraphers PRIVATE src)
target_link_libraries(FindCalligraphers PRIVATE
    Qt6::Core Qt6::Gui Qt6::Widgets Python::Python Python::NumPy
)

qt_add_binary_resources(FindCalligraphersRC
    DESTINATION resource.rcc
    resource/resource.qrc
)
add_dependencies(FindCalligraphers FindCalligraphersRC)

add_copy_files(FindCalligraphersCopyFiles
    DESTINATION "$<TARGET_FILE_DIR:FindCalligraphers>"
    scripts/model.py
    scripts/calligraphy_process.py
    resource/model.pt
    ${CMAKE_CURRENT_BINARY_DIR}/resource.rcc
)
add_dependencies(FindCalligraphersCopyFiles FindCalligraphers)
