# Code without UI (subtitles, mpv.conf handling, where translations are saved), kept
# apart from the app so autotests can link it.
add_library(qtpotato_core STATIC
    media/mediainfo.cpp
    media/mediainfo.h
    mpv/mpvuserconfig.cpp
    mpv/mpvuserconfig.h
    mpv/trackselection.cpp
    mpv/trackselection.h
    subtitles/subtitleparser.cpp
    subtitles/subtitleparser.h
    subtitles/subtitleextractor.cpp
    subtitles/subtitleextractor.h
    translate/translationstore.cpp
    translate/translationstore.h
)
target_include_directories(qtpotato_core PUBLIC media mpv subtitles translate)
target_link_libraries(qtpotato_core PUBLIC
    Qt6::Core
    KF6::I18n
    PRIVATE
    PkgConfig::FFMPEG
)

add_executable(qtpotato
    main.cpp
    models/recentfilesmodel.cpp
    models/recentfilesmodel.h
    mpris/mpriscontroller.cpp
    mpris/mpriscontroller.h
    mpris/mprisitem.cpp
    mpris/mprisitem.h
    mpris/playeradaptor.cpp
    mpris/playeradaptor.h
    mpris/rootadaptor.cpp
    mpris/rootadaptor.h
    mpv/mpvitem.cpp
    mpv/mpvitem.h
    playlist/playlistmodel.cpp
    playlist/playlistmodel.h
    translate/apikeystore.cpp
    translate/apikeystore.h
    translate/glossarystore.cpp
    translate/glossarystore.h
    translate/llmclient.cpp
    translate/llmclient.h
    translate/translationservice.cpp
    translate/translationservice.h
    translate/translationpresets.cpp
    translate/translationpresets.h
)

kconfig_target_kcfg_file(qtpotato
    FILE ${CMAKE_CURRENT_SOURCE_DIR}/settings/qtpotatosettings.kcfg
    CLASS_NAME QtPotatoSettings
    MUTATORS
    NOTIFIERS
    DEFAULT_VALUE_GETTERS
    GENERATE_PROPERTIES
    GENERATE_MOC
    SINGLETON
    QML_REGISTRATION
)

ecm_add_qml_module(qtpotato
    URI dev.trivk.qtpotato
)

ecm_target_qml_sources(qtpotato SOURCES
    qml/Actions.qml
    qml/AppMenu.qml
    qml/AppMenuItem.qml
    qml/AudioMenu.qml
    qml/AudioTracksMenu.qml
    qml/FileMenu.qml
    qml/Footer.qml
    qml/GeneralSettings.qml
    qml/GlossaryDialog.qml
    qml/HamburgerMenu.qml
    qml/Header.qml
    qml/HelpMenu.qml
    qml/InputPopup.qml
    qml/LabelWithTooltip.qml
    qml/Main.qml
    qml/MainMenuBar.qml
    qml/MpvContextMenu.qml
    qml/MpvVideo.qml
    qml/Osd.qml
    qml/PlaybackMenu.qml
    qml/PlaybackSettings.qml
    qml/Playlist.qml
    qml/PlaylistItem.qml
    qml/PlaylistSettings.qml
    qml/RecentFilesMenu.qml
    qml/ResizeHandler.qml
    qml/SeekBar.qml
    qml/SettingsBasePage.qml
    qml/SettingsHeader.qml
    qml/SettingsMenu.qml
    qml/SettingsWindow.qml
    qml/SubtitleTracksMenu.qml
    qml/SubtitlesMenu.qml
    qml/SubtitlesSettings.qml
    qml/ToolTipButton.qml
    qml/TranslationSettings.qml
    qml/VideoMenu.qml
    qml/ViewMenu.qml
    qml/VolumeSlider.qml
)

# Bundled copy of the app icon, used when the installed one is not in the icon theme
# (e.g. running from the build directory).
qt_add_resources(qtpotato "icons"
    PREFIX "/"
    BASE icons
    FILES icons/dev.trivk.qtpotato.svg
)

target_include_directories(qtpotato PRIVATE models mpris mpv playlist translate)
target_compile_definitions(qtpotato PRIVATE QTPOTATO_VERSION_STRING="${PROJECT_VERSION}")

target_link_libraries(qtpotato PRIVATE
    qtpotato_core
    Qt6::Gui
    Qt6::Qml
    Qt6::Quick
    Qt6::QuickControls2
    Qt6::Widgets
    Qt6::Network
    Qt6::Concurrent
    Qt6::DBus
    KF6::I18n
    KF6::I18nQml
    KF6::CoreAddons
    KF6::Crash
    KF6::ConfigCore
    KF6::ConfigGui
    MpvQt::MpvQt
    QCoro6::Core
    QCoro6::Network
    qt6keychain
)

install(TARGETS qtpotato ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
install(FILES dev.trivk.qtpotato.desktop DESTINATION ${KDE_INSTALL_APPDIR})
install(FILES icons/dev.trivk.qtpotato.svg DESTINATION ${KDE_INSTALL_FULL_ICONDIR}/hicolor/scalable/apps)
