cmake_minimum_required(VERSION 3.22)
project(SubWave LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# ── Find Qt6 ─────────────────────────────────────────────────────────────────
find_package(Qt6 REQUIRED COMPONENTS Widgets Multimedia OpenGL OpenGLWidgets)

# ── Find FFmpeg via pkg-config ───────────────────────────────────────────────
find_package(PkgConfig REQUIRED)
pkg_check_modules(FFMPEG REQUIRED IMPORTED_TARGET
    libavformat
    libavcodec
    libavutil
    libswresample
)

# Auto-generate MOC, and now also RCC for resource files
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

# ── Sources ──────────────────────────────────────────────────────────────────
set(SOURCES
    src/main.cpp
    src/MetadataReader.cpp
    src/Config.cpp
    src/AudioEngine.cpp
    src/MusicLibrary.cpp
    src/CoverArtWidget.cpp
    src/SpectrogramWidget.cpp
    src/GradientDialog.cpp
    src/EqualizerWidget.cpp
    src/TrackDelegate.cpp
    src/PlaylistModel.cpp
    src/MainWindow.cpp
)

set(HEADERS
    src/Track.h
    src/MetadataReader.h
    src/Config.h
    src/AudioEngine.h
    src/MusicLibrary.h
    src/CoverArtWidget.h
    src/SpectrogramWidget.h
    src/GradientDialog.h
    src/EqualizerWidget.h
    src/TrackDelegate.h
    src/PlaylistModel.h
    src/MainWindow.h
)

set(RESOURCES src/shaders.qrc)

add_executable(SubWave ${SOURCES} ${HEADERS} ${RESOURCES})

target_link_libraries(SubWave PRIVATE
    Qt6::Widgets
    Qt6::Multimedia
    Qt6::OpenGL
    Qt6::OpenGLWidgets
    PkgConfig::FFMPEG
)

# ── Copy FFmpeg shared libs next to the binary on Windows ────────────────────
if(WIN32)
    add_custom_command(TARGET SubWave POST_BUILD
        COMMAND ${CMAKE_COMMAND} -E copy_if_different
        "$<TARGET_FILE:PkgConfig::FFMPEG>" "$<TARGET_FILE_DIR:SubWave>"
    )
endif()