find_package(Qt6 REQUIRED COMPONENTS Core Gui Network Widgets Quick WebSockets LinguistTools Charts)

qt_standard_project_setup(REQUIRES 6.6 I18N_TRANSLATED_LANGUAGES de sv fi nb da tr)

qt_add_executable(evcharger-app WIN32 MACOSX_BUNDLE
    appsettings.cpp
    appsettings.h
    apikeyvaluehelper.cpp
    apikeyvaluehelper.h
    chartserieshelper.cpp
    chartserieshelper.h
    deviceconnection.cpp
    deviceconnection.h
    devicesmodel.cpp
    devicesmodel.h
    homeassistantclient.cpp
    homeassistantclient.h
    main.cpp
    sendmessagehelper.cpp
    sendmessagehelper.h
    timeutils.cpp
    timeutils.h
    versionutils.cpp
    versionutils.h
)

target_link_libraries(evcharger-app PRIVATE Qt6::Network)

qt6_add_translations(evcharger-app
    RESOURCE_PREFIX /EVChargerApp/i18n
    TS_FILE_BASE qml
    TS_FILE_DIR i18n
)

if (ANDROID)
    set(EVCHARGER_ANDROID_VERSION_CODE "1" CACHE STRING "Monotonically increasing Android version code")
    set(EVCHARGER_ANDROID_VERSION_NAME "0.1.0" CACHE STRING "Human-readable Android version")

    set_property(TARGET evcharger-app APPEND PROPERTY
        QT_ANDROID_PACKAGE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/android
    )
    include(${ANDROID_SDK_ROOT}/android_openssl/CMakeLists.txt)
    set_target_properties(evcharger-app PROPERTIES
        QT_ANDROID_EXTRA_LIBS "${ANDROID_EXTRA_LIBS}"
        QT_ANDROID_PACKAGE_NAME "ninja.brunner.evcharger"
        QT_ANDROID_MIN_SDK_VERSION 28
        QT_ANDROID_COMPILE_SDK_VERSION 36
        QT_ANDROID_TARGET_SDK_VERSION 36
        QT_ANDROID_VERSION_CODE "${EVCHARGER_ANDROID_VERSION_CODE}"
        QT_ANDROID_VERSION_NAME "${EVCHARGER_ANDROID_VERSION_NAME}"
    )

    # Custom cache variables are not automatically inherited by Qt's
    # secondary ABI builds.
    list(APPEND QT_ANDROID_MULTI_ABI_FORWARD_VARS
        EVCHARGER_ANDROID_VERSION_CODE
        EVCHARGER_ANDROID_VERSION_NAME
    )
endif()

set_source_files_properties(
    qml/AppTheme.qml
    qml/Constants.qml
    qml/MaterialIconFont.qml
    PROPERTIES QT_QML_SINGLETON_TYPE TRUE
)

qt_add_qml_module(evcharger-app
    URI EVChargerApp
    VERSION 1.0
    QML_FILES
        qml/AboutPage.qml
        qml/AccessPage.qml
        qml/AddDeviceScreen.qml
        qml/AnimatedStackLayout.qml
        qml/AnimatedStackView.qml
        qml/ApiKeyValueItem.qml
        qml/ApiStatusRow.qml
        qml/ApiEnumEditItem.qml
        qml/ApiSettingsPage.qml
        qml/AppInstance.qml
        qml/AppSettingsPage.qml
        qml/AppTheme.qml
        qml/BaseNavigationPage.qml
        qml/CablePage.qml
        qml/CarPage.qml
        qml/CategoryFactorEditItem.qml
        qml/CellularPage.qml
        qml/CenteredDialog.qml
        qml/ChargerTabPage.qml
        qml/ChargingConfigurationPage.qml
        qml/ChargingSpeedPage.qml
        qml/CloudApiQrCodePage.qml
        qml/CloudPage.qml
        qml/CloudUrlsModel.qml
        qml/ConfirmingOnOffSwitch.qml
        qml/ConnectingScreen.qml
        qml/ConnectionPage.qml
        qml/Constants.qml
        qml/ControllerPage.qml
        qml/ControllerTabPage.qml
        qml/CurrentLevelsPage.qml
        qml/DailyTripPage.qml
        qml/DateAndTimePage.qml
        qml/DeviceHeaderBar.qml
        qml/DeviceListScreen.qml
        qml/DeviceScreen.qml
        qml/DisplaySettingsPage.qml
        qml/DoubleSpinBox.qml
        qml/DurationEditItem.qml
        qml/EcoTabPage.qml
        qml/EditValueItem.qml
        qml/EthernetPage.qml
        qml/EVChargerApp.qml
        qml/FirmwarePage.qml
        qml/FlexibleEnergyTariffPage.qml
        qml/GeneralOnOffSwitch.qml
        qml/GeneralPage.qml
        qml/GridPage.qml
        qml/GroundCheckPage.qml
        qml/HardwareInformationPage.qml
        qml/HotspotPage.qml
        qml/HomeAssistantSetupDialog.qml
        qml/InformationsTabPage.qml
        qml/InformationChartPanel.qml
        qml/IndexedEditValueItem.qml
        qml/IndexedOnOffSwitch.qml
        qml/KwhLimitPage.qml
        qml/LanguageSelector.qml
        qml/LedPage.qml
        qml/LedRingPreview.qml
        qml/LicensesPage.qml
        qml/LoadBalancingPage.qml
        qml/LiveHistoryChart.qml
        qml/LogicModeButton.qml
        qml/MainScreen.qml
        qml/MaterialIcon.qml
        qml/MaterialIconFont.qml
        qml/MeasurementRow.qml
        qml/MqttPage.qml
        qml/NamePage.qml
        qml/NavigationItem.qml
        qml/NavigationPage.qml
        qml/NotificationsPage.qml
        qml/OcppPage.qml
        qml/OpenLinkButton.qml
        qml/PasswordPage.qml
        qml/PvSurplusPage.qml
        qml/QrCode.qml
        qml/RequestStatusText.qml
        qml/SchedulerDayPage.qml
        qml/SchedulerPage.qml
        qml/ScrollableTabPage.qml
        qml/SecurityPage.qml
        qml/SelectLogicModeItem.qml
        qml/SelectPhaseSwitchModeItem.qml
        qml/SendMessageButton.qml
        qml/SensorsConfigurationPage.qml
        qml/CurrentSensorPage.qml
        qml/CurrentSensorsPage.qml
        qml/SensorCategoriesPage.qml
        qml/SensorCategoryPage.qml
        qml/SettingsCard.qml
        qml/SettingsLabel.qml
        qml/SettingsSectionLabel.qml
        qml/SetPriceLimitPage.qml
        qml/SettingsTabPage.qml
        qml/SetValueHelper.qml
        qml/SimpleNavigationItem.qml
        qml/SolalawebSetupDialog.qml
        qml/StartStopButton.qml
        qml/SwitchLanguagePage.qml
        qml/TimeComponentLabel.qml
        qml/TimePickerDialog.qml
        qml/TimePickerLabel.qml
        qml/TimePicker.qml
        qml/TitleText.qml
        qml/VerticalTabButton.qml
        qml/VoltageSensorsPage.qml
        qml/WhiteBox.qml
        qml/WhiteCheckDelegate.qml
        qml/WhiteItemDelegate.qml
        qml/WhiteSwipeDelegate.qml
        qml/WiFiErrorsPage.qml
        qml/WiFiPage.qml
    RESOURCES
        qml/icons/Charger.svg
        qml/icons/ChargerV3.svg
        qml/icons/ChargerV4.svg
        qml/icons/Controller.svg
        qml/icons/Alarm.svg
        qml/icons/EcoModeFilled.svg
        qml/icons/Charts.svg
        qml/icons/type2_socket.svg
        qml/images/controller.png
        qml/images/geminiFlex.png
        qml/images/homeFix.png
        qml/images/homePlus.png
        qml/images/wattpilot.png
        qml/images/phoenix.png
        qml/images/geminiFix.png
        qml/js/qrcode.min.js
        qml/material-icons/add.svg
        qml/material-icons/arrow_back.svg
        qml/material-icons/open_in_new.svg
        qml/material-icons/settings.svg
        qml/flags/de.svg
        qml/flags/dk.svg
        qml/flags/fi.svg
        qml/flags/gb.svg
        qml/flags/no.svg
        qml/flags/se.svg
        qml/flags/system.svg
        qml/flags/tr.svg
        qml/ui-icons/MaterialIcons-Regular.ttf
)

target_link_libraries(evcharger-app PUBLIC
    Qt6::Core
    Qt6::Gui
    Qt6::Widgets
    Qt6::Quick
    Qt6::WebSockets
    Qt6::Charts
    qmsgpack
    QtZeroConf
    goecommon
)

target_link_libraries(evcharger-app PRIVATE bcrypt)
target_include_directories(evcharger-app PRIVATE
    ${PROJECT_SOURCE_DIR}/3rdparty/Bcrypt.cpp/src
)

install(TARGETS evcharger-app
    BUNDLE  DESTINATION .
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)

qt_generate_deploy_qml_app_script(
    TARGET evcharger-app
    OUTPUT_SCRIPT deploy_script
    MACOS_BUNDLE_POST_BUILD
    NO_UNSUPPORTED_PLATFORM_ERROR
    DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
install(SCRIPT ${deploy_script})
