cmake_minimum_required(VERSION 3.16)

project(Caliope VERSION 1.0 LANGUAGES CXX)

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

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)

find_package(Qt6 REQUIRED COMPONENTS
    Core
    Gui
    Widgets
    Network
    Svg
    Sql
    PrintSupport
    Xml
    Charts
    Help
    Multimedia
    LinguistTools
)

set(ICON_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/images/caliope.icns")

# Definir el ejecutable principal del proyecto.
add_executable(Caliope
    # Íconos de MAC
    ${ICON_SOURCE}
    # 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
    dfiledialog.cpp
    foldingtexthandler.cpp
    framingtexthandler.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
    dmessagelabel.cpp
    licensetemplate.cpp
    networksettings.cpp
    projects.cpp
    generalhighlighter.cpp
    statements.cpp
    dtableview.cpp
    ditemdelegate.cpp
    dlineedit.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
    dfiledialog.h
    foldingtexthandler.h
    framingtexthandler.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
    dmessagelabel.h
    licensetemplate.h
    networksettings.h
    projects.h
    generalhighlighter.h
    statements.h
    dtableview.h
    ditemdelegate.h
    dlineedit.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

    images.qrc
    documentation.qrc
    libraries.qrc
    Plugin.qrc
    sounds.qrc
)

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)
   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"
       MACOSX_BUNDLE_ICON_FILE "caliope.icns"
       MACOSX_BUNDLE_GUI_IDENTIFIER "org.caliope.Caliope"
       MACOSX_BUNDLE_BUNDLE_NAME "Calíope"
       MACOSX_BUNDLE_SHORT_VERSION_STRING "${PROJECT_VERSION}"
       MACOSX_BUNDLE_BUNDLE_VERSION "${PROJECT_VERSION}"
       MACOSX_BUNDLE TRUE
   )
   set_source_files_properties(${ICON_SOURCE}
       PROPERTIES
       MACOSX_PACKAGE_LOCATION Resources
   )
endif()

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
)

qt_add_translations(Caliope
    TS_FILES
        translations/Caliope_es_cr.ts
        translations/Caliope_fr_fr.ts
    LUPDATE_OPTIONS
        -no-obsolete
    RESOURCE_PREFIX "/translations"
    #Se debe agregar --target update_translations como paso en el build.
)

target_compile_definitions(Caliope PRIVATE QT_MESSAGELOGCONTEXT)