cmake_minimum_required(VERSION 3.14)

set(ANDROID_VERSION_NAME "0.8")
set(ANDROID_VERSION_CODE "8")

if(OVERRIDE_VERSION_NAME)
    set(ANDROID_VERSION_NAME "${OVERRIDE_VERSION_NAME}")
endif()
if(OVERRIDE_VERSION_CODE)
    set(ANDROID_VERSION_CODE "${OVERRIDE_VERSION_CODE}")
endif()

project(RadarApp
    VERSION ${ANDROID_VERSION_NAME}
    DESCRIPTION "Radar Squat Net Mobile App"
    LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

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

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(DOWNLOAD_URL ${APK_DOWNLOAD_URL} CACHE STRING "Apk download URL")

set(IMAGE_RESOURCES
    images/qrcode-apk.png
)

set(QRC_SOURCES ${IMAGE_RESOURCES})
set(CMAKE_GENERATED_RCC ${CMAKE_BINARY_DIR}/cmake_generated.qrc)
file(WRITE ${CMAKE_GENERATED_RCC}
"<!DOCTYPE RCC><RCC version=\"1.0\">\n"
"<qresource prefix=\"/\">\n"
)

# Android?
foreach(RES_FILE ${QRC_SOURCES})
    get_filename_component(FULL_PATH ${RES_FILE} ABSOLUTE)
    file(APPEND ${CMAKE_GENERATED_RCC}
        "<file alias=\""
        ${RES_FILE}
        "\">"
        ${FULL_PATH}
        "</file>\n"
        )
endforeach(RES_FILE)
file(APPEND ${CMAKE_GENERATED_RCC}
"</qresource>\n"
"</RCC>\n"
)

set(FONTS_RCC "${CMAKE_BINARY_DIR}/fonts.qrc")
set(SOURCE_FONT "${CMAKE_CURRENT_LIST_DIR}/fonts/materialdesignicons-webfont.ttf")
set(GLYPH_LIST "${CMAKE_CURRENT_LIST_DIR}/fonts/used_glyphs.txt")
configure_file(fonts/fonts.qrc "${FONTS_RCC}")

add_custom_target(ICON_FONT pyftsubset --output-file="${CMAKE_BINARY_DIR}/icons.ttf" --unicodes-file="${GLYPH_LIST}" "${SOURCE_FONT}"
    BYPRODUCTS "${CMAKE_BINARY_DIR}/icons.ttf")

set(CXX_SOURCES
    src/all_countries.cpp
    src/app.cpp
    src/citiesloader.cpp
    src/countriesloader.cpp
    src/database.cpp
    src/eventsloader.cpp
    src/eventsmodel.cpp
    src/locationprovider.cpp
    src/main.cpp
    src/all_countries.h
    src/citiesloader.h
    src/countriesloader.h
    src/app.h
    src/database.h
    src/eventsloader.h
    src/eventsmodel.h
    src/locationprovider.h)

if(ANDROID)
    find_package(QT NAMES Qt5 COMPONENTS Core AndroidExtras Quick QuickControls2 Positioning Sql REQUIRED)
    find_package(Qt5 REQUIRED COMPONENTS Core AndroidExtras Quick QuickControls2 Positioning Sql)

    if(ANDROID_SSL_LIBS)
        message(STATUS "Using provided SSL libs: ${ANDROID_SSL_LIBS}")
        list(APPEND ANDROID_EXTRA_LIBS ${ANDROID_SSL_LIBS})
        message(STATUS "ANDROID_EXTRA_LIBS=${ANDROID_EXTRA_LIBS}")
    else()
        set(USE_ANDROIDSSL TRUE)
    endif()

    set(OLD_QT FALSE)
    if(Qt5Core_VERSION VERSION_LESS 5.13.0)
      set(OLD_QT TRUE)
      include(qt-android-cmake/AddQtAndroidApk.cmake)
      message(STATUS "Using Qt < 5.13, no 'make apk' needed.")
    else()
      set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/android-new")
      set(QT_ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/android-new")
      message(STATUS "ANDROID_PACKAGE_SOURCE_DIR=${QT_ANDROID_PACKAGE_SOURCE_DIR}")
    endif()

    message(STATUS "ANDROID_EXTRA_LIBS=${ANDROID_EXTRA_LIBS}")
    set(QT_ANDROID_EXTRA_LIBS "${ANDROID_EXTRA_LIBS}")

    add_library(RadarApp SHARED
        ${CXX_SOURCES}
        translations.qrc
        resources.qrc
        qml_desktop.qrc
        ${CMAKE_GENERATED_RCC}
        ${FONTS_RCC}
    )

    if(USE_ANDROIDSSL)
        message(STATUS "Using SSL libs from android_openssl submodule")
        include(android_openssl/android_openssl.cmake)
        add_android_openssl_libraries(RadarApp)
        get_target_property(extra_libs RadarApp QT_ANDROID_EXTRA_LIBS)
        message(STATUS "extra_libs=${extra_libs}")
        set_target_properties(RadarApp PROPERTIES
                              QT_ANDROID_EXTRA_LIBS "${extra_libs}")
        list(APPEND ANDROID_EXTRA_LIBS ${extra_libs})

        message(STATUS "ANDROID_EXTRA_LIBS=${ANDROID_EXTRA_LIBS}")
    endif()

    set_target_properties(RadarApp PROPERTIES CXX_VISIBILITY_PRESET "hidden"
                                              VISIBILITY_INLINES_HIDDEN TRUE)

    target_compile_definitions(RadarApp PRIVATE "QT_DISABLE_DEPRECATED_BEFORE=0x050c00")
    target_compile_definitions(RadarApp
        PRIVATE $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:QT_QML_DEBUG>)
    target_compile_definitions(RadarApp PRIVATE APK_DOWNLOAD_URL="${DOWNLOAD_URL}")

    target_link_options(RadarApp PRIVATE "-Wl,--gc-sections")
    target_link_libraries(RadarApp
        Qt5::Core
        Qt5::AndroidExtras
        Qt5::Quick
        Qt5::QuickControls2
        Qt5::Positioning
        Qt5::Sql)

    if (OLD_QT)
      configure_file("${CMAKE_CURRENT_LIST_DIR}/android-qt5.12/AndroidManifest.xml.in"
                     "${CMAKE_CURRENT_LIST_DIR}/android-qt5.12/AndroidManifest.xml"
                     @ONLY)
      add_qt_android_apk(radar-app_apk RadarApp
          NAME "Radar App"
          VERSION_CODE ${ANDROID_VERSION_CODE}
          PACKAGE_NAME "org.radar.app"
          PACKAGE_SOURCES "${CMAKE_CURRENT_LIST_DIR}/android-qt5.12"
          DEPENDS "${ANDROID_EXTRA_LIBS}"
      )
    endif()
else()
    find_package(Qt5 COMPONENTS Core Quick Positioning QuickControls2 Sql REQUIRED)
    add_executable(RadarApp
        ${CXX_SOURCES}
        translations.qrc
        resources.qrc
        qml_desktop.qrc
        ${CMAKE_GENERATED_RCC}
        ${FONTS_RCC}
    )
    target_compile_definitions(RadarApp PRIVATE "QT_DISABLE_DEPRECATED_BEFORE=0x060000")
    qt5_use_modules(RadarApp Core Quick QuickControls2 Positioning Sql)
endif()

add_dependencies(RadarApp ICON_FONT)
