cmake_minimum_required(VERSION 3.22)

project(Abyss VERSION 1.0.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

# ── JUCE ──────────────────────────────────────────────────────────────────────
find_package(JUCE 7 QUIET CONFIG)

if(NOT JUCE_FOUND)
    set(JUCE_DIR "" CACHE PATH "Path to JUCE CMake config directory")
    if(EXISTS "${JUCE_DIR}/JUCEConfig.cmake")
        find_package(JUCE REQUIRED CONFIG PATHS "${JUCE_DIR}" NO_DEFAULT_PATH)
    else()
        message(FATAL_ERROR
            "JUCE 7.x not found.  Set -DJUCE_DIR=/path/to/JUCE/cmake "
            "or install JUCE so that find_package can locate it.")
    endif()
endif()

# ── DSP source files ──────────────────────────────────────────────────────────
set(DSP_SOURCES
    Source/DSP/Biquad.cpp
    Source/DSP/RandomBuffer.cpp
    Source/DSP/Parameters.cpp
)

set(DSP_HEADERS
    Source/DSP/AllpassDiffuser.h
    Source/DSP/Biquad.h
    Source/DSP/DelayLine.h
    Source/DSP/Hp1.h
    Source/DSP/LcgRandom.h
    Source/DSP/Lp1.h
    Source/DSP/ModulatedAllpass.h
    Source/DSP/ModulatedDelay.h
    Source/DSP/MultitapDelay.h
    Source/DSP/Parameters.h
    Source/DSP/Programs.h
    Source/DSP/RandomBuffer.h
    Source/DSP/ReverbChannel.h
    Source/DSP/ReverbController.h
    Source/DSP/Utils.h
)

# ── Plugin source files ───────────────────────────────────────────────────────
set(PLUGIN_SOURCES
    Source/PluginProcessor.cpp
    Source/PluginEditor.cpp
    Source/CustomLookAndFeel.cpp
    Source/CustomKnob.cpp
    Source/PresetManager.cpp
    Source/VUMeter.cpp
    Source/Main.cpp
)

set(PLUGIN_HEADERS
    Source/PluginProcessor.h
    Source/PluginEditor.h
    Source/CustomLookAndFeel.h
    Source/CustomKnob.h
    Source/PresetManager.h
    Source/VUMeter.h
)

# ── JUCE plugin target ────────────────────────────────────────────────────────
juce_add_plugin(Abyss
    COMPANY_NAME        "DarkSide"
    PRODUCT_NAME        "Abyss"
    PLUGIN_MANUFACTURER_CODE DkSd
    PLUGIN_CODE         Abys
    IS_SYNTH            FALSE
    NEEDS_MIDI_INPUT    FALSE
    NEEDS_MIDI_OUTPUT   FALSE
    IS_MIDI_EFFECT      FALSE

    FORMATS             VST3 AU Standalone

    PRODUCT_VERSION     1.0.0
)

target_sources(Abyss PRIVATE
    ${DSP_SOURCES}
    ${DSP_HEADERS}
    ${PLUGIN_SOURCES}
    ${PLUGIN_HEADERS}
)

target_include_directories(Abyss PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}/Source
)

target_link_libraries(Abyss PRIVATE
    juce::juce_audio_basics
    juce::juce_audio_processors
    juce::juce_audio_utils
    juce::juce_gui_basics
    juce::juce_gui_extra
    juce::juce_dsp
    juce::juce_graphics
    juce::juce_plugin_client
    PUBLIC
    juce::juce_recommended_config_flags
    juce::juce_recommended_lto_flags
    juce::juce_recommended_warning_flags
)