cmake_minimum_required(VERSION 3.0)

project(openPilotLog LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

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

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(QT_MIN_VERSION "5.5.1")

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DQT_USE_QSTRINGBUILDER")
MESSAGE ("Enabling QStringBuilder")

find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets Sql Network LinguistTools REQUIRED)
# find_package(OpenSSL REQUIRED) # Pending testing

set(PROJECT_SOURCES

    main.cpp
    src/opl.h
    src/opl.cpp

    ##  GUI
    mainwindow.h
    mainwindow.cpp
    mainwindow.ui
    # Dialogs
    src/gui/dialogues/firstrundialog.h
    src/gui/dialogues/firstrundialog.cpp
    src/gui/dialogues/firstrundialog.ui
    src/gui/dialogues/newairportdialog.h
    src/gui/dialogues/newairportdialog.cpp
    src/gui/dialogues/newairportdialog.ui
    src/gui/dialogues/newflightdialog.h
    src/gui/dialogues/newflightdialog.cpp
    src/gui/dialogues/newflightdialog.ui
    src/gui/dialogues/newpilotdialog.h
    src/gui/dialogues/newpilotdialog.cpp
    src/gui/dialogues/newpilot.ui
    src/gui/dialogues/newtaildialog.h
    src/gui/dialogues/newtaildialog.cpp
    src/gui/dialogues/newtail.ui
    src/gui/dialogues/newsimdialog.h
    src/gui/dialogues/newsimdialog.cpp
    src/gui/dialogues/newsimdialog.ui
    # Widgets
    src/gui/widgets/aircraftwidget.h
    src/gui/widgets/aircraftwidget.cpp
    src/gui/widgets/aircraftwidget.ui
    src/gui/widgets/airportwidget.h
    src/gui/widgets/airportwidget.cpp
    src/gui/widgets/airportwidget.ui
    src/gui/widgets/backupwidget.h
    src/gui/widgets/backupwidget.cpp
    src/gui/widgets/backupwidget.ui
    src/gui/widgets/debugwidget.h
    src/gui/widgets/debugwidget.cpp
    src/gui/widgets/debugwidget.ui
    src/gui/widgets/homewidget.h
    src/gui/widgets/homewidget.cpp
    src/gui/widgets/homewidget.ui
    src/gui/widgets/logbookwidget.h
    src/gui/widgets/logbookwidget.cpp
    src/gui/widgets/logbookwidget.ui
    src/gui/widgets/pilotswidget.h
    src/gui/widgets/pilotswidget.cpp
    src/gui/widgets/pilotswidget.ui
    src/gui/widgets/settingswidget.cpp
    src/gui/widgets/settingswidget.h
    src/gui/widgets/settingswidget.ui


    # Classes
    src/classes/astyle.h
    src/classes/astyle.cpp
    src/classes/astandardpaths.h
    src/classes/astandardpaths.cpp
    src/classes/adownload.h
    src/classes/adownload.cpp
    src/classes/arunguard.h
    src/classes/arunguard.cpp
    src/classes/asettings.h
    src/classes/asettings.cpp
    src/classes/atranslator.h
    src/classes/atranslator.cpp
    src/classes/ajson.h
    src/classes/ajson.cpp
    src/classes/ahash.h
    src/classes/ahash.cpp

    # Namespaces
    src/functions/acalc.h
    src/functions/acalc.cpp
    src/functions/adatetime.h
    src/functions/alog.h
    src/functions/alog.cpp
    src/functions/areadcsv.h
    src/functions/areadcsv.cpp
    src/functions/astat.h
    src/functions/astat.cpp
    src/functions/adate.h
    src/functions/adate.cpp
    src/functions/atime.h

    # Database
    src/database/database.h
    src/database/database.cpp
    src/database/row.h
    src/database/row.cpp
    src/database/dbcompletiondata.h
    src/database/dbcompletiondata.cpp
    src/database/dbsummary.h
    src/database/dbsummary.cpp

    # Ressources
    assets/icons.qrc
    assets/database/templates.qrc
    assets/themes/stylesheets/breeze/breeze.qrc
    assets/themes/stylesheets/qdarkstyle/qdarkstyle.qrc

    # Testing / Debug
    src/testing/importCrewlounge/importcrewlounge.h
    src/testing/importCrewlounge/importcrewlounge.cpp
    src/testing/importCrewlounge/processpilots.h
    src/testing/importCrewlounge/processpilots.cpp
    src/testing/importCrewlounge/processaircraft.h
    src/testing/importCrewlounge/processaircraft.cpp
    src/testing/importCrewlounge/processflights.h
    src/testing/importCrewlounge/processflights.cpp
    src/testing/atimer.h
    src/testing/atimer.cpp
)

# This is currently a bit buggy, see
# https://bugreports.qt.io/browse/QTBUG-41736
# https://bugreports.qt.io/browse/QTBUG-76410
# Before working on the translations themselves, check for updates and consider not updating for
# every build due to danger of loss of translations...
#if (Qt5Widgets_FOUND)
#    if (Qt5Widgets_VERSION VERSION_LESS 5.15.0)
#        message("Translations are available for Qt5 version >= 5.15")
#    else()
#        message("Qt > 5.15 detected. Enabling translations.")
#        set(TS_FILES
#            l10n/openpilotlog_en.ts
#            l10n/openpilotlog_de.ts
#            l10n/openpilotlog_es.ts
#        )
#        set_source_files_properties(${TS_FILES} PROPERTIES OUTPUT_LOCATION "l10n")
#        qt5_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})
#    endif(Qt5Widgets_VERSION VERSION_LESS 5.15.0)
#endif(Qt5Widgets_FOUND)

# Disable Debug output for Release Build
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
    message("Build type: Debug")
elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
    message("Build type: Release")
    add_definitions(-DQT_NO_DEBUG_OUTPUT)
endif()


if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(openPilotLog
        ${PROJECT_SOURCES}
        ${QM_FILES}
    )
else()
    add_executable(openPilotLog
        ${PROJECT_SOURCES}
        ${QM_FILES}
    )
endif()

# target_link_libraries(openPilotLog PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Sql Qt${QT_VERSION_MAJOR}::Network OpenSSL::SSL)
target_link_libraries(openPilotLog PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Sql Qt${QT_VERSION_MAJOR}::Network)

install(TARGETS openPilotLog DESTINATION bin)