cmake_minimum_required(VERSION 3.16)

project(xrdialog VERSION 0.6.1 LANGUAGES CXX)

# C++ standard
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Auto-generate MOC and QRC
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

# Find ECM
find_package(ECM REQUIRED NO_MODULE)
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})

# KDE modules
include(KDEInstallDirs)
include(KDECMakeSettings)
include(KDECompilerSettings NO_POLICY_SCOPE)

# Find Qt6
find_package(Qt6 REQUIRED COMPONENTS
    Core
    Gui
    Quick
    Qml
    LinguistTools
)

# Find KF6
find_package(KF6 REQUIRED COMPONENTS
    I18n
)

# Build executable
add_executable(xrdialog
    src/main.cpp
    src/configmanager.cpp
    src/configmanager.h
    src/invoiceoperations.cpp
    src/invoiceoperations.h
    src/pdfprocessor.cpp
    src/pdfprocessor.h
    src/checksumgenerator.cpp
    src/checksumgenerator.h
    src/workflowlogger.cpp
    src/workflowlogger.h
    src/thumbnailgenerator.cpp
    src/thumbnailgenerator.h
    resources.qrc
)

# Link libraries
target_link_libraries(xrdialog
    Qt6::Core
    Qt6::Gui
    Qt6::Quick
    Qt6::Qml
    KF6::I18n
)

# Pass version to code
target_compile_definitions(xrdialog PRIVATE APP_VERSION="${PROJECT_VERSION}")

# Translations - !FIXME! Direct import?
find_program(MSGFMT_EXECUTABLE msgfmt)
if(MSGFMT_EXECUTABLE)
    file(GLOB PO_FILES "${CMAKE_CURRENT_SOURCE_DIR}/po/*/xrdialog.po")
    foreach(PO_FILE ${PO_FILES})
        get_filename_component(LANG_DIR ${PO_FILE} DIRECTORY)
        get_filename_component(LANG ${LANG_DIR} NAME)
        set(MO_FILE "${CMAKE_CURRENT_BINARY_DIR}/locale/${LANG}/LC_MESSAGES/xrdialog.mo")
        add_custom_command(
            OUTPUT ${MO_FILE}
            COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/locale/${LANG}/LC_MESSAGES"
            COMMAND ${MSGFMT_EXECUTABLE} -o ${MO_FILE} ${PO_FILE}
            DEPENDS ${PO_FILE}
            COMMENT "Compiling ${LANG} translation"
        )
        list(APPEND MO_FILES ${MO_FILE})
        install(FILES ${MO_FILE}
                DESTINATION ${KDE_INSTALL_LOCALEDIR}/${LANG}/LC_MESSAGES)
    endforeach()
    add_custom_target(translations ALL DEPENDS ${MO_FILES})
endif()

# Install
install(TARGETS xrdialog ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
install(FILES de.treuchtlingen.xrdialog.desktop DESTINATION ${KDE_INSTALL_APPDIR})

# Install example documentation - if not updated, the examples will run into problems in future
install(FILES
    doc/example/config
    doc/example/secret
    doc/example/haushaltsstellen.csv
    DESTINATION ${KDE_INSTALL_DATAROOTDIR}/doc/xrdialog/example
)

# Install help documentation
install(FILES
    doc/help/help_de.md
    DESTINATION ${KDE_INSTALL_DATAROOTDIR}/doc/xrdialog/help
)
