# ==============================================================================
# 1. Configuración Básica y Versión de CMake
# ==============================================================================
# Se requiere al menos CMake 3.16 para las funcionalidades modernas de Qt.
cmake_minimum_required(VERSION 3.16)

# Definición del proyecto, versión y lenguajes.
project(Caliope VERSION 1.0 LANGUAGES CXX)

# Variables varias
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

# Estándar de C++:
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# ==============================================================================
# 2. Habilitar Características de Qt
# (Necesario para archivos .h que usan Q_OBJECT, .ui y .qrc)
# ==============================================================================
set(CMAKE_AUTOUIC ON) # Procesa archivos .ui (Designer forms)
set(CMAKE_AUTORCC ON) # Procesa archivos .qrc (Resource files)
set(CMAKE_AUTOMOC ON) # Procesa archivos .h con Q_OBJECT (Metacompilación)

# ==============================================================================
# 3. Encontrar y Configurar Módulos de Qt
# (Basado en la línea: QT += network widgets svg sql printsupport xml charts help multimedia)
# ==============================================================================
find_package(Qt6 REQUIRED COMPONENTS
    Core
    Gui
    Widgets
    Network
    Svg
    Sql
    PrintSupport
    Xml
    Charts
    Help
    Multimedia
    # Si quieres habilitar QML/Quick:
    # Qml
    # Quick
    # QuickWidgets
)

# ==============================================================================
# 4. Definición de Archivos Fuente y Ejecutable (Target)
# ==============================================================================

# Definir el ejecutable principal del proyecto.
add_executable(Caliope
    # Archivos fuente (.cpp)
    backup.cpp
    dchartview.cpp
    ddashboard.cpp
    dfileselector.cpp
    dhelpviewer.cpp
    dloaddata.cpp
    dmariadbrealqueryonqthread.cpp
    dmonitoring.cpp
    dquerylogger.cpp
    dsettings.cpp
    dsoundeffect.cpp
    dstartuptips.cpp
    dtour.cpp
    foldingtexthandler.cpp
    framingtexthandler.cpp
    gitlabfilesearcher.cpp
    main.cpp
    connectdialog.cpp
    restorebackupfile.cpp
    serverInformation.cpp
    catalogs.cpp
    dstatusbar.cpp
    processlist.cpp
    dtitlelabel.cpp
    staticfunctions.cpp
    tablemaintenance.cpp
    findreplace.cpp
    dtablewidget.cpp
    result.cpp
    users.cpp
    preferences.cpp
    newdatabase.cpp
    texteditor.cpp
    editortypes.cpp
    basetexteditor.cpp
    subversionedfile.cpp
    dmessagelabel.cpp
    objectsdiagram.cpp
    commitdialog.cpp
    basedifffile.cpp
    difffile.cpp
    licensetemplate.cpp
    networksettings.cpp
    basesvnlog.cpp
    svnlog.cpp
    projects.cpp
    generalhighlighter.cpp
    statements.cpp
    dtableview.cpp
    ditemdelegate.cpp
    dlineedit.cpp
    fileassociations.cpp
    mainwindow.cpp
    projectfindreplace.cpp
    dbms.cpp
    sqlquery.cpp
    databasecomparision.cpp
    dmdisubwindow.cpp
    dstackedwidget.cpp
    dquerylog.cpp
    applicationtheme.cpp
    dreportviewer.cpp
    dpiechartwidget.cpp
    codesnippets.cpp
    objectmigration.cpp
    dicon.cpp
    dlistwidgetdialog.cpp

    # Archivos de cabecera (.h)
    # Se listan para mejor inspección, pero CMAKE_AUTOMOC ON los encuentra si están incluidos.
    backup.h
    connectdialog.h
    dchartview.h
    ddashboard.h
    dfileselector.h
    dhelpviewer.h
    dloaddata.h
    dmariadbrealqueryonqthread.h
    dmonitoring.h
    dquerylogger.h
    dsettings.h
    dsoundeffect.h
    dstartuptips.h
    dtour.h
    foldingtexthandler.h
    framingtexthandler.h
    gitlabfilesearcher.h
    restorebackupfile.h
    serverInformation.h
    catalogs.h
    dstatusbar.h
    processlist.h
    dtitlelabel.h
    staticfunctions.h
    tablemaintenance.h
    findreplace.h
    dtablewidget.h
    result.h
    users.h
    preferences.h
    newdatabase.h
    texteditor.h
    editortypes.h
    basetexteditor.h
    subversionedfile.h
    dmessagelabel.h
    objectsdiagram.h
    commitdialog.h
    basedifffile.h
    difffile.h
    licensetemplate.h
    networksettings.h
    basesvnlog.h
    svnlog.h
    projects.h
    generalhighlighter.h
    statements.h
    dtableview.h
    ditemdelegate.h
    dlineedit.h
    fileassociations.h
    mainwindow.h
    projectfindreplace.h
    dbms.h
    sqlquery.h
    databasecomparision.h
    dmdisubwindow.h
    dstackedwidget.h
    dquerylog.h
    applicationtheme.h
    dreportviewer.h
    dpiechartwidget.h
    codesnippets.h
    objectmigration.h
    dicon.h
    dlistwidgetdialog.h

    # Archivos de Recursos (.qrc)
    images.qrc
    documentation.qrc
    styles.qrc
    translations.qrc
    libraries.qrc
    qml.qrc
    Plugin.qrc
    sounds.qrc

    # Archivos de Traducción (.ts)
    translations/Caliope_es_cr.ts
    translations/Caliope_fr_fr.ts

    # Archivos .ui (Si tienes alguno, agrégalo aquí. El .pro no listaba ninguno.)
    # mainwindow.ui
)

# ==============================================================================
# 5. Configuración de MariaDB (Manejo de Plataformas y Librerías Externas)
# ==============================================================================

# Rutas de Inclusión para el target (tanto para .h como para la búsqueda de libs)
target_include_directories(Caliope PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/mariadb/include)

if(UNIX AND NOT APPLE) # Linux y otros Unix (Excluyendo macOS)
    target_link_directories(Caliope PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/mariadb/lib)
    target_link_libraries(Caliope PRIVATE mariadb ssl crypto)
elseif(WIN32) # Windows
    target_link_directories(Caliope PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/mariadb/lib)
    target_link_libraries(Caliope PRIVATE libmariadb)
# elseif(APPLE) # macOS (Macx en qmake) - Descomentar si se habilita el bloque en .pro
#    target_link_directories(Caliope PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/mariadb/lib/mac)
#    target_link_libraries(Caliope PRIVATE mariadbclient ssl crypto)
#    # Opciones específicas de macOS de qmake:
#    set_target_properties(Caliope PROPERTIES
#        MACOSX_DEPLOYMENT_TARGET "14.0"
#        OSX_ARCHITECTURES "arm64" # "x86_64"
#    )
endif()

# Enlazar Caliope con los módulos de Qt encontrados previamente
target_link_libraries(Caliope PRIVATE
    Qt6::Core
    Qt6::Gui
    Qt6::Widgets
    Qt6::Network
    Qt6::Svg
    Qt6::Sql
    Qt6::PrintSupport
    Qt6::Xml
    Qt6::Charts
    Qt6::Help
    Qt6::Multimedia
    # Qt6::Qml Qt6::Quick Qt6::QuickWidgets
)

# ==============================================================================
# 6. Variables Adicionales y Archivos de Traducción
# ==============================================================================

# Definiciones adicionales (DEFINES += QT_MESSAGELOGCONTEXT)
target_compile_definitions(Caliope PRIVATE QT_MESSAGELOGCONTEXT)

# Manejo de SUBDIRS para imágenes (Si "images" contiene otro CMakeLists.txt)
# Si "images" es solo un directorio, no necesitas esta línea si los archivos .qrc
# ya incluyen todo. Si es un subproyecto:
# add_subdirectory(images)

# Otros archivos (p. ej., CSS, documentación)
# Aunque no afectan la compilación, se pueden incluir para herramientas de IDE o distribución.
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/styles/mainStyle.css DESTINATION share/Caliope)
