# SPDX-FileCopyrightText: 2026 ahouts
# SPDX-License-Identifier: GPL-2.0-or-later

cmake_minimum_required(VERSION 3.29)
project(slugrewrite-plugin VERSION 1.0.0)

set(KF_MIN_VERSION "6.22.0")
set(QT_REQUIRED_VERSION "6.9.0")

find_package(ECM ${KF_MIN_VERSION} CONFIG REQUIRED)
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})

include(KDEInstallDirs)
include(KDECMakeSettings)
include(KDECompilerSettings NO_POLICY_SCOPE)
include(ECMQtDeclareLoggingCategory)

find_package(Qt6 ${QT_REQUIRED_VERSION} REQUIRED COMPONENTS WebEngineWidgets Widgets)
find_package(KF6 ${KF_MIN_VERSION} REQUIRED COMPONENTS I18n ConfigWidgets CoreAddons)
find_package(KPim6WebEngineViewer CONFIG REQUIRED)
find_package(KPim6MessageViewer CONFIG REQUIRED)
find_package(KPim6PimCommon CONFIG REQUIRED)
find_package(Corrosion CONFIG REQUIRED)

# Rust crate
add_custom_target(
    slugrewrite_rs
    SOURCES
        rs/slugrewrite/Cargo.toml
        rs/slugrewrite/build.rs
        rs/slugrewrite/src/lib.rs
        rs/slugrewrite/src/slugrewrite.rs
)

corrosion_import_crate(MANIFEST_PATH ${CMAKE_CURRENT_SOURCE_DIR}/rs/slugrewrite/Cargo.toml)

# CXX bridge include path (version-dependent, same pattern as kdepim-addons adblock)
if(Corrosion_VERSION VERSION_LESS 0.6.0)
    set(corrosion_build_dir "build")
else()
    string(SHA1 cargo_path_hash ${CMAKE_CURRENT_SOURCE_DIR}/rs/slugrewrite/Cargo.toml)
    string(SUBSTRING "${cargo_path_hash}" 0 5 cargo_path_hash)
    set(corrosion_build_dir "slugrewrite_${cargo_path_hash}")
endif()

# Plugin target
kcoreaddons_add_plugin(webengineviewer_slugrewriteplugin
    INSTALL_NAMESPACE pim6/webengineviewer/urlinterceptor
)

target_sources(
    webengineviewer_slugrewriteplugin
    PRIVATE
        slugrewritepluginurlinterceptor.h
        slugrewritepluginurlinterceptor.cpp
        slugrewriteinterceptorinterface.h
        slugrewriteinterceptorinterface.cpp
        slugrewriteengine.h
        slugrewriteengine.cpp
        slugrewriteconfiguredialog.h
        slugrewriteconfiguredialog.cpp
        slugrewriteconfigurewidget.h
        slugrewriteconfigurewidget.cpp
        slugrewriteruledialog.h
        slugrewriteruledialog.cpp
)

kconfig_add_kcfg_files(webengineviewer_slugrewriteplugin
    settings/slugrewritesettings.kcfgc
)

ecm_qt_declare_logging_category(webengineviewer_slugrewriteplugin
    HEADER slugrewriteinterceptor_debug.h
    IDENTIFIER SLUGREWRITEINTERCEPTOR_LOG
    CATEGORY_NAME org.kde.pim.slugrewriteinterceptor
    DESCRIPTION "slugrewrite url interceptor plugin"
)

target_include_directories(
    webengineviewer_slugrewriteplugin
    PRIVATE
        ${CMAKE_BINARY_DIR}/cargo/${corrosion_build_dir}/${Rust_CARGO_TARGET}/cxxbridge/webengineviewer-slugrewrite/src/
)

target_link_libraries(
    webengineviewer_slugrewriteplugin
    KPim6::MessageViewer
    KPim6::WebEngineViewer
    KPim6::PimCommon
    KF6::I18n
    KF6::ConfigWidgets
    KF6::CoreAddons
    Qt::WebEngineWidgets
)

# Link Rust static lib (target name depends on Corrosion version)
if(Corrosion_VERSION VERSION_LESS 0.5.0)
    target_link_libraries(webengineviewer_slugrewriteplugin webengineviewer-slugrewrite)
else()
    target_link_libraries(webengineviewer_slugrewriteplugin webengineviewer_slugrewrite)
endif()