# SPDX-FileCopyrightText: 2023 g10 code GmbH
# SPDX-Contributor: Carl Schwan <carl.schwan@gnupg.com>
# SPDX-License-Identifier: BSD-2-Clause

add_library(gpgol-client-static STATIC)

target_sources(gpgol-client-static PRIVATE
    websocketclient.cpp
    websocketclient.h
    webserver.h
    webserver.cpp
    messagedispatcher.cpp
    messagedispatcher.h

    # Identity
    identity/addressvalidationjob.cpp
    identity/addressvalidationjob.h
    identity/identitymanager.cpp
    identity/identitymanager.h
    identity/identitydialog.cpp
    identity/identitydialog.h
    identity/identity.cpp
    identity/identity.h
    identity/signature.h
    identity/signature.cpp
    identity/signatureconfigurator.cpp
    identity/signatureconfigurator.h
    identity/signaturerichtexteditor.cpp
    identity/signaturerichtexteditor_p.h

    # HTTP Controller
    controllers/emailcontroller.cpp
    controllers/emailcontroller.h

    # Draft
    draft/draft.cpp
    draft/draft.h
    draft/draftmanager.cpp
    draft/draftmanager.h

    # EWS integration
    ews/ewsattachment.cpp
    ews/ewsattachment.h
    ews/ewsattendee.cpp
    ews/ewsattendee.h
    ews/ewsclient_debug.cpp
    ews/ewsclient_debug.h
    ews/ewsid.cpp
    ews/ewsid.h
    ews/ewsitem.cpp
    ews/ewsitem.h
    ews/ewsitembase.cpp
    ews/ewsitembase.h
    ews/ewsitembase_p.h
    ews/ewsmailbox.cpp
    ews/ewsmailbox.h
    ews/ewsmailfactory.cpp
    ews/ewsmailfactory.h
    ews/ewsmessagedispatcher.cpp
    ews/ewsmessagedispatcher.h
    ews/ewsoccurrence.cpp
    ews/ewsoccurrence.h
    ews/ewspropertyfield.cpp
    ews/ewspropertyfield.h
    ews/ewsrecurrence.cpp
    ews/ewsrecurrence.h
    ews/ewsserverversion.cpp
    ews/ewsserverversion.h
    ews/ewstypes.cpp
    ews/ewstypes.h
    ews/ewsxml.cpp
    ews/ewsxml.h

    # Editor
    editor/addresseelineedit.cpp
    editor/addresseelineedit.h
    editor/addresseelineeditmanager.cpp
    editor/addresseelineeditmanager.h
    editor/composerviewbase.cpp
    editor/composerviewbase.h
    editor/composerwindow.cpp
    editor/composerwindow.h
    editor/composerwindowfactory.cpp
    editor/composerwindowfactory.h
    editor/cryptostateindicatorwidget.cpp
    editor/cryptostateindicatorwidget.h
    editor/kmcomposerglobalaction.cpp
    editor/kmcomposerglobalaction.h
    editor/nearexpirywarning.cpp
    editor/nearexpirywarning.h
    editor/mailtemplates.cpp
    editor/mailtemplates.h
    editor/recipient.cpp
    editor/recipient.h
    editor/recipientline.cpp
    editor/recipientline.h
    editor/recipientseditor.cpp
    editor/recipientseditor.h
    editor/util.h
    editor/util.cpp
    editor/kmailcompletion.cpp
    editor/kmailcompletion.h
    editor/richtextcomposerng.cpp
    editor/richtextcomposerng.h
    editor/richtextcomposersignatures.cpp
    editor/richtextcomposersignatures.h
    editor/nodehelper.cpp
    editor/nodehelper.h
    editor/signaturecontroller.cpp
    editor/signaturecontroller.h
    editor/spellcheckerconfigdialog.cpp
    editor/spellcheckerconfigdialog.h

    # Editor job
    editor/job/abstractencryptjob.h
    editor/job/autocryptheadersjob.h
    editor/job/contentjobbase.h
    editor/job/contentjobbase_p.h
    editor/job/composerjob.cpp
    editor/job/composerjob.h
    editor/job/encryptjob.h
    editor/job/inserttextfilejob.h
    editor/job/itipjob.h
    editor/job/jobbase.h
    editor/job/jobbase_p.h
    editor/job/maintextjob.h
    editor/job/multipartjob.h
    editor/job/protectedheadersjob.h
    editor/job/signencryptjob.h
    editor/job/signjob.h
    editor/job/singlepartjob.h
    editor/job/skeletonmessagejob.h
    editor/job/transparentjob.h
    editor/job/autocryptheadersjob.cpp
    editor/job/contentjobbase.cpp
    editor/job/encryptjob.cpp
    editor/job/inserttextfilejob.cpp
    editor/job/itipjob.cpp
    editor/job/jobbase.cpp
    editor/job/maintextjob.cpp
    editor/job/multipartjob.cpp
    editor/job/protectedheadersjob.cpp
    editor/job/saveasfilejob.cpp
    editor/job/saveasfilejob.h
    editor/job/signencryptjob.cpp
    editor/job/signjob.cpp
    editor/job/singlepartjob.cpp
    editor/job/skeletonmessagejob.cpp
    editor/job/transparentjob.cpp

    ## Editor Part
    editor/part/globalpart.h
    editor/part/infopart.h
    editor/part/itippart.h
    editor/part/messagepart.h
    editor/part/textpart.h
    editor/part/globalpart.cpp
    editor/part/infopart.cpp
    editor/part/itippart.cpp
    editor/part/messagepart.cpp
    editor/part/textpart.cpp

    ## Attachment
    editor/attachment/attachmentjob.cpp
    editor/attachment/attachmentjob.h
    editor/attachment/attachmentclipboardjob.cpp
    editor/attachment/attachmentclipboardjob.h
    editor/attachment/attachmentcompressjob.cpp
    editor/attachment/attachmentcompressjob.h
    editor/attachment/attachmentcontroller.cpp
    editor/attachment/attachmentcontroller.h
    editor/attachment/attachmentcontrollerbase.cpp
    editor/attachment/attachmentcontrollerbase.h
    editor/attachment/attachmentfromfolderjob.cpp
    editor/attachment/attachmentfromfolderjob.h
    editor/attachment/attachmentfrommimecontentjob.cpp
    editor/attachment/attachmentfrommimecontentjob.h
    editor/attachment/attachmentfromurlbasejob.cpp
    editor/attachment/attachmentfromurlbasejob.h
    editor/attachment/attachmentfromurljob.cpp
    editor/attachment/attachmentfromurljob.h
    editor/attachment/attachmentfromurlutils.cpp
    editor/attachment/attachmentfromurlutils.h
    editor/attachment/attachmentfrompublickeyjob.cpp
    editor/attachment/attachmentfrompublickeyjob.h
    editor/attachment/attachmentloadjob.cpp
    editor/attachment/attachmentloadjob.h
    editor/attachment/attachmentmodel.cpp
    editor/attachment/attachmentmodel.h
    editor/attachment/attachmentpart.cpp
    editor/attachment/attachmentpart.h
    editor/attachment/attachmentpropertiesdialog.cpp
    editor/attachment/attachmentpropertiesdialog.h
    editor/attachment/attachmentupdatejob.cpp
    editor/attachment/attachmentupdatejob.h
    editor/attachment/attachmentview.cpp
    editor/attachment/attachmentview.h
)

ki18n_wrap_ui(gpgol-client-static
    editor/attachment/ui/attachmentpropertiesdialog.ui
    editor/attachment/ui/attachmentpropertiesdialog_readonly.ui
)

ecm_qt_declare_logging_category(gpgol-client-static_SRCS
    HEADER websocket_debug.h
    IDENTIFIER WEBSOCKET_LOG
    CATEGORY_NAME org.gpgol.client.websocket
    DESCRIPTION "Websocket connection in the client"
    EXPORT GPGOL
)

ecm_qt_declare_logging_category(gpgol-client-static_SRCS
    HEADER ewsresource_debug.h
    IDENTIFIER EWSRES_LOG
    CATEGORY_NAME org.gpgol.ews
    DESCRIPTION "Ews mail client"
    EXPORT GPGOL
)

ecm_qt_declare_logging_category(gpgol-client-static_SRCS
    HEADER ewscli_debug.h
    IDENTIFIER EWSCLI_LOG
    CATEGORY_NAME org.gpgol.ews.client
    DESCRIPTION "ews client (gpgol-client)"
    EXPORT GPGOL
)

ecm_qt_declare_logging_category(gpgol-client-static_SRCS
    HEADER editor_debug.h
    IDENTIFIER EDITOR_LOG
    CATEGORY_NAME org.gpgol.editor
    DESCRIPTION "mail composer"
    EXPORT GPGOL
)

set(WARN_TOOMANY_RECIPIENTS_DEFAULT true)
set(ALLOW_SEMICOLON_AS_ADDRESS_SEPARATOR_DEFAULT true)

configure_file(editor/settings/messagecomposer.kcfg.in ${CMAKE_CURRENT_BINARY_DIR}/messagecomposer.kcfg)

kconfig_add_kcfg_files(gpgol-client-static editor/settings/messagecomposersettings.kcfgc)

install(FILES composerui.rc DESTINATION ${KDE_INSTALL_KXMLGUIDIR}/gpgol-client)

target_sources(gpgol-client-static PUBLIC ${gpgol-client-static_SRCS})

target_link_libraries(gpgol-client-static PUBLIC
    common

    Qt6::HttpServer
    Qt6::Widgets
    Qt6::PrintSupport
    Qt6::WebSockets

    KF6::I18n
    KF6::JobWidgets
    KF6::CalendarCore
    KF6::ConfigCore
    KF6::ConfigGui
    KF6::Contacts
    KF6::Completion
    KF6::CoreAddons
    KF6::ColorScheme
    KF6::Codecs
    KF6::GuiAddons
    KF6::SonnetUi
    KF6::WidgetsAddons
    KF6::XmlGui
    KF6::Archive
    KF6::TextAutoCorrectionCore

    KPim6::MimeTreeParserCore
    KPim6::MimeTreeParserWidgets
    KPim6::Libkleo
    KPim6::Libkdepim
    KPim6::PimTextEdit
)

add_executable(gpgol-client main.cpp)
target_link_libraries(gpgol-client PRIVATE gpgol-client-static)

if (BUILD_TESTING)
    add_subdirectory(autotests)
endif()

install(TARGETS gpgol-client ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
