# SPDX-License-Identifier: BSD-3-Clause
# SPDX-FileCopyrightText: 2025 Laurent Montel <montel@kde.org>
add_definitions(-DTRANSLATION_DOMAIN=\"libtextautogeneratetext\")
set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF6TextAutoGenerateText")

ecm_setup_version(PROJECT VARIABLE_PREFIX TEXTAUTOGENERATETEXT
    VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/textautogeneratetext_version.h"
    PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF6TextAutoGenerateTextConfigVersion.cmake"
    SOVERSION 1
)

install(FILES
    "${CMAKE_CURRENT_BINARY_DIR}/KF6TextAutoGenerateTextConfig.cmake"
    "${CMAKE_CURRENT_BINARY_DIR}/KF6TextAutoGenerateTextConfigVersion.cmake"
    DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
    COMPONENT Devel
)

install(EXPORT KF6TextAutoGenerateTextTargets DESTINATION "${CMAKECONFIG_INSTALL_DIR}" FILE KF6TextAutoGenerateTextTargets.cmake NAMESPACE KF6::)

install(FILES
    ${CMAKE_CURRENT_BINARY_DIR}/textautogeneratetext_version.h
    DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF}/TextAutoGenerateText/ COMPONENT Devel
)

add_library(KF6TextAutoGenerateText)

add_library(KF6::TextAutoGenerateText ALIAS KF6TextAutoGenerateText)
ecm_qt_declare_logging_category(KF6TextAutoGenerateText HEADER textautogeneratetextcore_database_debug.h
    IDENTIFIER TEXTAUTOGENERATETEXT_CORE_DATABASE_LOG
    CATEGORY_NAME org.kde.kf.textautogeneratetext.database
    DESCRIPTION "KF6 (TextAutoGenerateText core database)"
    EXPORT KTEXTADDONS
)

ecm_qt_declare_logging_category(KF6TextAutoGenerateText HEADER textautogeneratetextcore_debug.h
    IDENTIFIER TEXTAUTOGENERATETEXT_CORE_LOG
    CATEGORY_NAME org.kde.kf.textautogeneratetext
    DESCRIPTION "KF6 (TextAutoGenerateText core)"
    EXPORT KTEXTADDONS
)

ecm_qt_declare_logging_category(KF6TextAutoGenerateText HEADER textautogeneratetextcore_memory_debug.h
    IDENTIFIER TEXTAUTOGENERATETEXT_CORE_MEMORY_LOG
    CATEGORY_NAME org.kde.kf.textautogeneratetext
    DESCRIPTION "KF6 (TextAutoGenerateText core memory)"
    EXPORT KTEXTADDONS
)

ecm_qt_declare_logging_category(KF6TextAutoGenerateText HEADER textautogeneratetextwidget_debug.h
    IDENTIFIER TEXTAUTOGENERATETEXT_WIDGET_LOG
    CATEGORY_NAME org.kde.kf.textautogeneratetext.widget
    DESCRIPTION "KF6 (TextAutoGenerateText widget)"
    EXPORT KTEXTADDONS
)

ecm_qt_declare_logging_category(KF6TextAutoGenerateText HEADER textautogeneratetextwidget_animation_debug.h
    IDENTIFIER TEXTAUTOGENERATETEXT_WIDGET_ANIMATION_LOG
    CATEGORY_NAME org.kde.kf.textautogeneratetext.widget_animation
    DESCRIPTION "KF6 (TextAutoGenerateText widget animation)"
    EXPORT KTEXTADDONS
)

ecm_qt_declare_logging_category(KF6TextAutoGenerateText HEADER textautogeneratetextwidget_menu_debug.h
    IDENTIFIER TEXTAUTOGENERATETEXT_WIDGET_MENU_LOG
    CATEGORY_NAME org.kde.kf.textautogeneratetext.widget_menu
    DESCRIPTION "KF6 (TextAutoGenerateText widget menu)"
    EXPORT KTEXTADDONS
)

target_sources(KF6TextAutoGenerateText PRIVATE
    core/textautogenerateengineplugin.h
    core/textautogenerateengineplugin.cpp
    core/textautogenerateengineloader.cpp
    core/textautogenerateengineloader.h
    core/textautogeneratetextclient.h
    core/textautogeneratetextclient.cpp
    core/textautogeneratetextplugin.h
    core/textautogeneratetextplugin.cpp
    core/textautogeneratemanager.h
    core/textautogeneratemanager.cpp
    core/textautogenerateengineaccessmanager.cpp
    core/textautogenerateengineaccessmanager.h

    core/textautogeneratechatsettings.h
    core/textautogeneratechatsettings.cpp

    core/textautogeneratetextreplyinfo.h
    core/textautogeneratetextreplyinfo.cpp

    core/textautogenerateengineutil.h
    core/textautogenerateengineutil.cpp

    core/textautogeneratemessagesmodel.h
    core/textautogeneratemessagesmodel.cpp

    core/textautogeneratesearchmessagesmodel.h
    core/textautogeneratesearchmessagesmodel.cpp

    core/textautogeneratesearchmessage.h
    core/textautogeneratesearchmessage.cpp

    core/textautogeneratemessage.h
    core/textautogeneratemessage.cpp

    core/textautogenerateanswerinfo.h
    core/textautogenerateanswerinfo.cpp

    core/textautogeneratetextcontext.h
    core/textautogeneratetextcontext.cpp

    core/textautogeneratehistorysortfilterproxymodel.h
    core/textautogeneratehistorysortfilterproxymodel.cpp

    core/textautogeneratehistorylistheadingsproxymodel.h
    core/textautogeneratehistorylistheadingsproxymodel.cpp

    core/textautogeneratemessageutils.h
    core/textautogeneratemessageutils.cpp

    core/textautogeneratechat.h
    core/textautogeneratechat.cpp
    core/textautogeneratechatsmodel.h
    core/textautogeneratechatsmodel.cpp

    core/localdatabase/textautogeneratelocaldatabaseutils.h
    core/localdatabase/textautogeneratelocaldatabaseutils.cpp

    core/localdatabase/textautogeneratelocaldatabaseabstract.h
    core/localdatabase/textautogeneratelocaldatabaseabstract.cpp
    core/localdatabase/textautogeneratelocalchatsdatabase.h
    core/localdatabase/textautogeneratelocalchatsdatabase.cpp
    core/localdatabase/textautogeneratelocalmessagesdatabase.cpp
    core/localdatabase/textautogeneratelocalmessagesdatabase.h
    core/localdatabase/textautogeneratelocaldatabasemanager.h
    core/localdatabase/textautogeneratelocaldatabasemanager.cpp

    core/textautogeneratesearchjob.h
    core/textautogeneratesearchjob.cpp

    core/textautogenerateaskjob.h
    core/textautogenerateaskjob.cpp

    core/textautogeneratesearchmessageutils.h
    core/textautogeneratesearchmessageutils.cpp

    core/textautogeneratereply.h
    core/textautogeneratereply.cpp
    core/textautogeneratetextrequest.cpp
    core/textautogeneratetextrequest.h

    core/textautogeneratemanagerbase.h
    core/textautogeneratemanagerbase.cpp
)

target_sources(KF6TextAutoGenerateText PRIVATE
    widgets/textautogenerateconfigurewidget.h
    widgets/textautogenerateconfigurewidget.cpp
    widgets/textautogeneratetextconfigurecombowidget.cpp
    widgets/textautogeneratetextconfigurecombowidget.h

    widgets/textautogeneratetextlineeditwidget.h
    widgets/textautogeneratetextlineeditwidget.cpp

    widgets/textautogenerateresultwidget.h
    widgets/textautogenerateresultwidget.cpp
    widgets/textautogeneratetextlineedit.h
    widgets/textautogeneratetextlineedit.cpp

    widgets/textautogeneratewidget.h
    widgets/textautogeneratewidget.cpp

    widgets/textautogeneratedialog.h
    widgets/textautogeneratedialog.cpp

    widgets/view/textautogeneratelistview.h
    widgets/view/textautogeneratelistview.cpp

    widgets/view/textautogeneratelistviewdelegate.h
    widgets/view/textautogeneratelistviewdelegate.cpp
    widgets/view/textautogeneratelistviewbasedelegate.cpp
    widgets/view/textautogeneratelistviewbasedelegate.h

    widgets/view/textautogeneratedelegateutils.h
    widgets/view/textautogeneratedelegateutils.cpp

    widgets/view/textautogenerateselectedmessagebackgroundanimation.h
    widgets/view/textautogenerateselectedmessagebackgroundanimation.cpp

    widgets/view/textautogeneratemessagewaitingansweranimation.h
    widgets/view/textautogeneratemessagewaitingansweranimation.cpp
    widgets/view/textautogeneratecolorsandmessageviewstyle.h
    widgets/view/textautogeneratecolorsandmessageviewstyle.cpp
    widgets/view/textautogeneratebaselistview.h
    widgets/view/textautogeneratebaselistview.cpp

    widgets/view/textautogeneratesearchlistview.h
    widgets/view/textautogeneratesearchlistview.cpp

    widgets/view/textautogeneratesearchlistviewdelegate.h
    widgets/view/textautogeneratesearchlistviewdelegate.cpp

    widgets/textautogeneratestackwidget.h
    widgets/textautogeneratestackwidget.cpp

    widgets/textautogenerateconfiguredialog.h
    widgets/textautogenerateconfiguredialog.cpp

    widgets/textautogeneratenotworkingwidget.h
    widgets/textautogeneratenotworkingwidget.cpp

    widgets/textautogeneratehistorywidget.h
    widgets/textautogeneratehistorywidget.cpp

    widgets/view/textautogeneratehistorylistview.h
    widgets/view/textautogeneratehistorylistview.cpp

    widgets/view/textautogeneratehistorylistviewdelegate.h
    widgets/view/textautogeneratehistorylistviewdelegate.cpp
    widgets/view/textautogeneratelistviewtextselection.h
    widgets/view/textautogeneratelistviewtextselection.cpp
    widgets/view/lrucache.h

    widgets/textautogenerateheaderwidget.h
    widgets/textautogenerateheaderwidget.cpp

    widgets/textautogeneratesearchwidget.h
    widgets/textautogeneratesearchwidget.cpp

    widgets/textautogeneratesearchdialog.h
    widgets/textautogeneratesearchdialog.cpp

    widgets/textautogeneratesearchlineedit.h
    widgets/textautogeneratesearchlineedit.cpp

    widgets/menu/textautogeneratemenuconfiguredialog.cpp
    widgets/menu/textautogeneratemenuconfiguredialog.h
    widgets/menu/textautogeneratemenuconfigurewidget.cpp
    widgets/menu/textautogeneratemenuconfigurewidget.h
    widgets/menu/textautogeneratemenulistview.cpp
    widgets/menu/textautogeneratemenulistview.h
    widgets/menu/textautogeneratemenulistviewdelegate.cpp
    widgets/menu/textautogeneratemenulistviewdelegate.h
    widgets/menu/textautogeneratemenumodel.cpp
    widgets/menu/textautogeneratemenumodel.h
    widgets/menu/textautogeneratemenutextinfo.cpp
    widgets/menu/textautogeneratemenutextinfo.h
    widgets/menu/textautogeneratemenutextmanager.cpp
    widgets/menu/textautogeneratemenutextmanager.h
    widgets/menu/textautogeneratemenuwidget.cpp
    widgets/menu/textautogeneratemenuwidget.h
)

if(BUILD_TESTING)
    add_subdirectory(core/autotests)
    add_subdirectory(autotests)
    add_subdirectory(tests)
    add_subdirectory(widgets/menu/autotests)
endif()

add_subdirectory(plugins)


if(COMPILE_WITH_UNITY_CMAKE_SUPPORT)
    set_target_properties(KF6TextAutoGenerateText PROPERTIES UNITY_BUILD ON)
endif()
generate_export_header(KF6TextAutoGenerateText BASE_NAME textautogeneratetext)


target_link_libraries(KF6TextAutoGenerateText
    PUBLIC
    Qt::Gui
    Qt::Widgets
    Qt::Network
    PRIVATE
    Qt::Sql
    KF6::I18n
    KF6::WidgetsAddons
    KF6::ConfigGui
    KF6::TextWidgets
    KF6::CoreAddons
    KF6::ColorScheme
)
target_include_directories(KF6TextAutoGenerateText INTERFACE "$<INSTALL_INTERFACE:${KDE_INSTALL_INCLUDEDIR_KF}/TextAutoGenerateText/>")

set_target_properties(KF6TextAutoGenerateText PROPERTIES
    VERSION ${TEXTAUTOGENERATETEXT_VERSION}
    SOVERSION ${TEXTAUTOGENERATETEXT_SOVERSION}
    EXPORT_NAME TextAutoGenerateText
)

ecm_generate_headers(TextAutoGenerateText_Camelcasestextautogeneratetextcore_HEADERS
    HEADER_NAMES
    TextAutoGenerateEnginePlugin
    TextAutoGenerateTextClient
    TextAutoGenerateTextPlugin
    TextAutoGenerateTextContext
    TextAutoGenerateHistorySortFilterProxyModel
    TextAutoGenerateMessagesModel
    TextAutoGenerateManager
    TextAutoGenerateMessage
    TextAutoGenerateAnswerInfo
    TextAutoGenerateChat
    TextAutoGenerateTextReplyInfo
    TextAutoGenerateSearchMessagesModel
    TextAutoGenerateSearchMessage
    TextAutoGenerateAskJob
    TextAutoGenerateReply
    TextAutoGenerateTextRequest
    TextAutoGenerateManagerBase
    REQUIRED_HEADERS TextAutoGenerateText_textautogeneratetextcore_HEADERS
    PREFIX TextAutoGenerateText
    RELATIVE core
)

ecm_generate_headers(TextAutoGenerateText_Camelcasestextautogeneratetextwidgets_HEADERS
    HEADER_NAMES
    TextAutoGenerateConfigureWidget
    TextAutoGenerateConfigureDialog
    TextAutoGenerateResultWidget
    TextAutoGenerateWidget
    TextAutoGenerateDialog
    REQUIRED_HEADERS TextAutoGenerateText_textautogeneratetextwidgets_HEADERS
    PREFIX TextAutoGenerateText
    RELATIVE widgets
)

ecm_generate_headers(TextAutoGenerateText_Camelcasestextautogeneratetextwidgetsmenu_HEADERS
    HEADER_NAMES
    TextAutoGenerateMenuWidget
    TextAutoGenerateMenuConfigureDialog
    TextAutoGenerateMenuTextInfo
    TextAutoGenerateMenuConfigureWidget
    REQUIRED_HEADERS TextAutoGenerateText_textautogeneratetextwidgetsmenu_HEADERS
    PREFIX TextAutoGenerateText
    RELATIVE widgets/menu
)

install(TARGETS
    KF6TextAutoGenerateText
    EXPORT KF6TextAutoGenerateTextTargets ${KDE_INSTALL_TARGETS_DEFAULT_ARGS}
)

install(FILES
    ${CMAKE_CURRENT_BINARY_DIR}/textautogeneratetext_version.h
    DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF}/TextAutoGenerateText/ COMPONENT Devel
)

install(FILES
    ${TextAutoGenerateText_Camelcasestextautogeneratetextcore_HEADERS}
    ${TextAutoGenerateText_Camelcasestextautogeneratetextwidgets_HEADERS}
    ${TextAutoGenerateText_Camelcasestextautogeneratetextwidgetsmenu_HEADERS}
    DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF}/TextAutoGenerateText/TextAutoGenerateText
    COMPONENT Devel
)

install(FILES
    ${CMAKE_CURRENT_BINARY_DIR}/textautogeneratetext_export.h
    ${TextAutoGenerateText_textautogeneratetextcore_HEADERS}
    ${TextAutoGenerateText_textautogeneratetextwidgets_HEADERS}
    ${TextAutoGenerateText_textautogeneratetextwidgetsmenu_HEADERS}
    DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF}/TextAutoGenerateText/textautogeneratetext
    COMPONENT Devel
)


if(BUILD_QCH)
    ecm_add_qch(
        KF6TextAutoGenerateText_QCH
        NAME KF6TextAutoGenerateText
        BASE_NAME KF6TextAutoGenerateText
        VERSION ${TEXTAUTOGENERATETEXT_VERSION}
        ORG_DOMAIN org.kde
        SOURCES # using only public headers, to cover only public API
        ${TextAutoGenerateText_textautogeneratetextcore_HEADERS}
        ${TextAutoGenerateText_textautogeneratetextwidgets_HEADERS}
        LINK_QCHS
            Qt6Core_QCH
            Qt6Gui_QCH
            Qt6Widgets_QCH
        INCLUDE_DIRS
            ${CMAKE_CURRENT_BINARY_DIR}
        BLANK_MACROS
            TEXTAUTOGENERATETEXT_EXPORT
        TAGFILE_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR}
        QCH_INSTALL_DESTINATION ${KDE_INSTALL_QTQCHDIR}
        COMPONENT Devel
)
endif()
if(BUILD_QCH)
    ecm_install_qch_export(
        TARGETS KF6TextAutoGenerateText_QCH
        FILE KF6TextAutoGenerateTextQchTargets.cmake
        DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
        COMPONENT Devel
)
    set(PACKAGE_INCLUDE_QCHTARGETS "include(\"\${CMAKE_CURRENT_LIST_DIR}/KF6TextAutoGenerateTextQchTargets.cmake\")")
endif()

configure_package_config_file(
    "${CMAKE_CURRENT_SOURCE_DIR}/KFTextAutoGenerateTextConfig.cmake.in"
    "${CMAKE_CURRENT_BINARY_DIR}/KF6TextAutoGenerateTextConfig.cmake"
    INSTALL_DESTINATION  ${CMAKECONFIG_INSTALL_DIR}
)
