cmake_minimum_required(VERSION 3.16)
project(WinoMailQt VERSION 1.0.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Find Qt components
find_package(Qt6 COMPONENTS Core Gui Widgets Network Sql WebEngineWidgets Qml Multimedia REQUIRED)

# Optional: DTK Widgets for Deepin look
option(USE_DTKWIDGET "Use DTK Widgets for Deepin look" ON)
if(USE_DTKWIDGET)
    find_package(PkgConfig)
    pkg_check_modules(DTKWIDGET dtkwidget)
    if(DTKWIDGET_FOUND)
        message(STATUS "Found DTKWidget: ${DTKWIDGET_VERSION}")
        add_definitions(-DDTKWIDGET_FOUND)
        include_directories(${DTKWIDGET_INCLUDE_DIRS})
        set(DTKWIDGET_LIBS ${DTKWIDGET_LIBRARIES})
    else()
        message(WARNING "DTKWidget not found, using fallback Qt widgets")
        set(USE_DTKWIDGET OFF)
    endif()
endif()

# Find optional libraries (example: libetpan, gmime)
find_package(PkgConfig)
pkg_check_modules(GMIME gmime-3.0)

# Include directories
include_directories(${PROJECT_SOURCE_DIR}/src)
if(USE_DTKWIDGET AND DTKWIDGET_FOUND)
    include_directories(${DTKWIDGET_INCLUDE_DIRS})
endif()
if(GMIME_FOUND)
    include_directories(${GMIME_INCLUDE_DIRS})
endif()

# Enable automatic moc, uic, rcc
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)

# Source files
set(SRC_FILES
    src/main.cpp
    src/core/translator.cpp
    src/core/mailitem.cpp
    src/core/models/account.cpp
    src/core/models/folder.cpp
    src/services/synchronizer.cpp
    src/services/imap/imapsynchronizer.cpp
    src/services/outlook/outlooksynchronizer.cpp
    src/services/gmail/gmailsynchronizer.cpp
    src/services/request.cpp
    src/services/concreterequests.cpp
    src/services/requestprocessor.cpp
    src/services/changetype.cpp
    src/services/changprocessor.cpp
    src/db/databasemanager.cpp
    src/db/dao/accountdao.cpp
    src/db/dao/folderdao.cpp
    src/db/dao/mailitemdao.cpp
    src/db/dbchangeprocessor.cpp
    src/core/eventbus.cpp
    src/utils/notificationmanager.cpp
    src/core/emailmanager.cpp
    src/core/emailcomposerbridge.cpp
    src/core/synchronizerprovider.cpp
    src/syncscheduler.cpp
    src/core/accountsetupdialoglauncher.cpp
    src/ui/dialogs/accountsetupdialog.cpp
    resources.qrc
)

# Executable
add_executable(wino-mail-qt ${SRC_FILES})

# Link Qt
    target_link_libraries(wino-mail-qt PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets Qt6::Network Qt6::Sql Qt6::WebEngineWidgets Qt6::Qml Qt6::Quick  Qt6::Multimedia)

# Link DTKWidget if found
if(USE_DTKWIDGET AND DTKWIDGET_FOUND)
    target_link_libraries(wino-mail-qt PRIVATE ${DTKWIDGET_LIBS})
endif()

# If using external libs
target_link_libraries(wino-mail-qt PRIVATE ${GMIME_LIBRARIES})
target_include_directories(wino-mail-qt PRIVATE ${GMIME_INCLUDE_DIRS})

# Install (optional)
install(TARGETS wino-mail-qt DESTINATION bin)
