cmake_minimum_required(VERSION 3.21)

project(TNCat
    VERSION 0.3.0
    DESCRIPTION "A cute desktop cat that wanders along the bottom of your screen"
    LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(Qt6 6.5 REQUIRED COMPONENTS Core Gui Quick QuickControls2 Widgets)
qt_standard_project_setup(REQUIRES 6.5)

qt_add_executable(tncat
    src/main.cpp
    src/catcontroller.h src/catcontroller.cpp
    src/traycontroller.h src/traycontroller.cpp
    src/appsettings.h src/appsettings.cpp
    src/platforminfo.h src/platforminfo.cpp
)

target_include_directories(tncat PRIVATE src)

# QML files live in qml/ but register at the module root (TNCat.Main etc.)
set(TNCAT_QML Main Cat Chip Cup CatWindow ChipWindow CupWindow OverlayWindow SettingsWindow CatMoods)
foreach(qmlfile IN LISTS TNCAT_QML)
    set_source_files_properties(qml/${qmlfile}.qml PROPERTIES QT_RESOURCE_ALIAS ${qmlfile}.qml)
    list(APPEND TNCAT_QML_FILES qml/${qmlfile}.qml)
endforeach()

set_source_files_properties(qml/CatMoods.qml PROPERTIES QT_QML_SINGLETON_TYPE TRUE)

qt_add_qml_module(tncat
    URI TNCat
    VERSION 1.0
    QML_FILES ${TNCAT_QML_FILES}
)

target_link_libraries(tncat PRIVATE
    Qt6::Core Qt6::Gui Qt6::Quick Qt6::QuickControls2 Qt6::Widgets)

set_target_properties(tncat PROPERTIES
    MACOSX_BUNDLE TRUE
    MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/Info.plist.in
    MACOSX_BUNDLE_GUI_IDENTIFIER app.tncat.example
    MACOSX_BUNDLE_BUNDLE_NAME TNCat
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    WIN32_EXECUTABLE TRUE)

include(GNUInstallDirs)
install(TARGETS tncat
    BUNDLE DESTINATION .
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})

if(UNIX AND NOT APPLE)
    install(FILES linux/tncat.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
endif()

qt_generate_deploy_qml_app_script(
    TARGET tncat
    OUTPUT_SCRIPT deploy_script
    MACOS_BUNDLE_POST_BUILD
    NO_UNSUPPORTED_PLATFORM_ERROR
    DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM)
install(SCRIPT ${deploy_script})
