cmake_minimum_required(VERSION 3.16)
project(shipheart_cm5 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

find_package(Qt6 REQUIRED COMPONENTS
    Quick
    VirtualKeyboard
    Qml
    Sql
    QuickControls2
    Charts
    LinguistTools
)
set_target_properties(Qt6::lrelease PROPERTIES
    IMPORTED_LOCATION /usr/local/bin/lrelease-host
    IMPORTED_LOCATION_RELEASE /usr/local/bin/lrelease-host
    IMPORTED_LOCATION_NONE /usr/local/bin/lrelease-host
)

# ---------------------------------------------------------------------------
# Version dynamique, injectée dans _version.h à CHAQUE build (pas seulement
# à chaque reconfiguration CMake), au même format que le .pro d'origine
# (yymmdd_HHMMSS, ex: 260807_133409) et avec la même garantie : deux
# exécutables différents obtiennent toujours un horodatage différent.
#
# Mécanisme : une cible personnalisée sans suivi de fichier (add_custom_target
# ... ALL, sans dépendance de fichier source) est donc TOUJOURS considérée
# périmée par Ninja/Make et se ré-exécute avant chaque build, contrairement à
# string(TIMESTAMP ...) seul qui ne s'évalue qu'à la configuration du projet.
#
# NB IMPORTANT - modification de main.cpp nécessaire : ce mécanisme régénère
# le fichier source _version.h - il faut donc que main.cpp fasse
#     #include "_version.h"
# (actuellement absent : VERSION n'y est utilisé que comme macro fournie par
# le compilateur). Cet ajout est neutre pour la compilation CM4/qmake (qui
# continue de fournir VERSION via DEFINES +=, sans jamais regénérer ni lire
# le contenu de _version.h).
# ---------------------------------------------------------------------------
add_custom_target(generate_version ALL
    COMMAND ${CMAKE_COMMAND}
        -DOUTPUT_FILE=${CMAKE_CURRENT_SOURCE_DIR}/_version.h
        -P ${CMAKE_CURRENT_SOURCE_DIR}/generate_version.cmake
    COMMENT "Régénération de _version.h (horodatage)"
    BYPRODUCTS ${CMAKE_CURRENT_SOURCE_DIR}/_version.h
)

add_executable(shipheart_qt
    backend.cpp
    bdd.cpp
    main.cpp
    systeme.cpp
    tb_mesures.cpp
    # Headers listés pour visibilité dans l'IDE (non obligatoire pour la compilation) :
    _version.h
    backend.h
    bdd.h
    shipheart.h
    systeme.h
    tb_mesures.h
    # Ressources :
    qml.qrc
    traductions.qrc
)

add_dependencies(shipheart_qt generate_version)

target_link_libraries(shipheart_qt PRIVATE
    Qt6::Quick
    Qt6::VirtualKeyboard
    Qt6::Qml
    Qt6::Sql
    Qt6::QuickControls2
    Qt6::Charts
)

# ---------------------------------------------------------------------------
# Traductions (équivalent de TRANSLATIONS + lupdate/lrelease du .pro)
# ---------------------------------------------------------------------------
set(QT_LRELEASE_EXECUTABLE /usr/local/bin/lrelease-host)
set(TS_FILES
    shipheart_fr_FR.ts
    shipheart_en_EN.ts
    shipheart_de_DE.ts
    shipheart_es_ES.ts
    shipheart_pt_PT.ts
    shipheart_nl_NL.ts
    shipheart_it_IT.ts
    shipheart_lv_LV.ts
    shipheart_ca_ES.ts
)
qt_add_translations(shipheart_qt TS_FILES ${TS_FILES})

# ---------------------------------------------------------------------------
# Dispositions de clavier virtuel personnalisées (virtualkeyboard_layouts_koriolan)
#
# RÉSOLU : ces fichiers sont déjà intégralement référencés dans qml.qrc
# (confirmé), et chargés au runtime via une ressource Qt embarquée
# (qputenv("QT_VIRTUALKEYBOARD_LAYOUT_PATH", ":/virtualkeyboard_layouts_koriolan/layouts")
# dans main.cpp). Rien à ajouter ici : qml.qrc est déjà dans la liste des
# sources de add_executable() ci-dessus, donc ces fichiers sont embarqués
# dans le binaire comme sur CM4.
#
# Dette technique notée pour plus tard (hors scope de ce portage) : la
# duplication complète de tous les layouts Qt (toutes langues, tous modes)
# pour la seule modification d'une touche (Espace -> Moins) dans
# fallback/digits.qml est disproportionnée. Une solution plus ciblée
# existe probablement (héritage partiel des layouts standards), à explorer
# séparément - à tester sur CM4 ET CM5 si entreprise, code source commun.
# ---------------------------------------------------------------------------

# ---------------------------------------------------------------------------
# Installation (équivalent target.path du .pro)
# ---------------------------------------------------------------------------
install(TARGETS shipheart_qt
    DESTINATION /home/koriolan/shipheart/versions/current
)

# NB : le mécanisme QMAKE_POST_LINK du .pro d'origine copiait l'exécutable
# vers un chemin LOCAL à l'ancien poste de développement Ubuntu
# (/home/koriolan/SharePoint_Koriolan_Documents/...) - obsolète dans le
# nouveau contexte (compilation croisée WSL2 + déploiement SSH piloté par
# Qt Creator). Non repris ici ; à remplacer, si un historique des versions
# compilées est toujours souhaité, par un mécanisme côté CM5 ou côté WSL2,
# à définir séparément.
