cmake_minimum_required(VERSION 3.22)
project(SubWave LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(Qt6 REQUIRED COMPONENTS Widgets Multimedia OpenGL OpenGLWidgets Core)

# require ffmpeg
find_package(PkgConfig REQUIRED)
pkg_check_modules(FFMPEG REQUIRED IMPORTED_TARGET
    libavformat
    libavcodec
    libavutil
    libswresample
)
# require fftw (fourier transform)
pkg_check_modules(FFTW REQUIRED IMPORTED_TARGET fftw3)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

# source files
set(SOURCES
    src/main.cpp
    src/MetadataReader.cpp
    src/Config.cpp
    src/engine/AudioEngine.cpp
    src/engine/FFmpegDecoder.cpp
    src/engine/EqProcessor.cpp
    src/engine/SpectrumAnalyzer.cpp
    src/MusicLibrary.cpp
    src/CoverArtWidget.cpp
    src/SpectrogramWidget.cpp
    src/GradientDialog.cpp
    src/EqualizerWidget.cpp
    src/TrackDelegate.cpp
    src/playlists/PlaylistModel.cpp
    src/playlists/PlaylistManager.cpp
    src/playlists/PlaylistCreatorDialog.cpp
    src/playlists/PlaylistBrowserDialog.cpp
    src/MainWindow.cpp
)

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

set(RESOURCES 
    src/shaders.qrc
    src/application.qrc
)
# normal platforms
add_executable(SubWave ${SOURCES} ${HEADERS} ${RESOURCES})

# For windows stupid ahh
if(WIN32)
    set_target_properties(SubWave PROPERTIES WIN32_EXECUTABLE TRUE)
endif()

target_include_directories(SubWave PRIVATE
    src
    src/engine
    src/playlists
)

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