cmake_minimum_required(VERSION 3.16)
project(gitplusplus VERSION 0.1.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTOMOC ON)

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

# --- Detect Qt6/KF6 or fall back to Qt5/KF5 ---
find_package(KF6TextEditor QUIET CONFIG)
if(KF6TextEditor_FOUND)
    set(QT_MAJOR_VERSION 6)
else()
    set(QT_MAJOR_VERSION 5)
endif()

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

if(QT_MAJOR_VERSION EQUAL 6)
    find_package(Qt6 REQUIRED COMPONENTS Core Widgets)
    find_package(KF6I18n REQUIRED)
    find_package(KF6CoreAddons REQUIRED)
    set(KF_LINK_LIBS
        KF6::TextEditor
        KF6::I18n
        Qt6::Core
        Qt6::Widgets
    )
    set(PLUGIN_INSTALL_NS "kf6/ktexteditor")
    message(STATUS "Building Git++ with KF6/Qt6")
else()
    find_package(Qt5 REQUIRED COMPONENTS Core Widgets)
    find_package(KF5TextEditor REQUIRED)
    find_package(KF5I18n REQUIRED)
    find_package(KF5CoreAddons REQUIRED)
    set(KF_LINK_LIBS
        KF5::TextEditor
        KF5::I18n
        Qt5::Core
        Qt5::Widgets
    )
    set(PLUGIN_INSTALL_NS "ktexteditor")
    message(STATUS "Building Git++ with KF5/Qt5")
endif()

# --- Find libkateprivate for diff widget support ---
# The library may only exist as a versioned .so (no dev symlink)
file(GLOB _KATEPRIVATE_CANDIDATES
    "/usr/lib64/libkateprivate.so*"
    "/usr/lib/libkateprivate.so*"
    "/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}/libkateprivate.so*"
    "/usr/lib/*/libkateprivate.so*"
)
if(_KATEPRIVATE_CANDIDATES)
    list(GET _KATEPRIVATE_CANDIDATES 0 KATEPRIVATE_LIB)
    message(STATUS "Found libkateprivate: ${KATEPRIVATE_LIB}")
    add_definitions(-DHAVE_KATE_DIFF)
else()
    set(KATEPRIVATE_LIB "")
    message(STATUS "libkateprivate not found — diff will open as plain text")
endif()

kcoreaddons_add_plugin(gitplusplus
    SOURCES
        gitplusplus.cpp
        gitstatusmodel.cpp
    INSTALL_NAMESPACE "${PLUGIN_INSTALL_NS}"
)

target_link_libraries(gitplusplus ${KF_LINK_LIBS})
target_include_directories(gitplusplus PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})

if(KATEPRIVATE_LIB)
    target_include_directories(gitplusplus PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/kate-compat)
    target_link_libraries(gitplusplus ${KATEPRIVATE_LIB})
endif()
