cmake_minimum_required(VERSION 3.22)
project(ChromaFlock VERSION 1.0.0 LANGUAGES C CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

include(FetchContent)

if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/JUCE/CMakeLists.txt")
    message(STATUS "JUCE not found locally — fetching from GitHub...")
    FetchContent_Declare(
        JUCE
        GIT_REPOSITORY https://github.com/juce-framework/JUCE.git
        GIT_TAG        8.0.6
        GIT_SHALLOW    TRUE
    )
    FetchContent_MakeAvailable(JUCE)
else()
    add_subdirectory(JUCE)
endif()

juce_add_binary_data(ChromaFlockBinaryData
    NAMESPACE BinaryData
    SOURCES
        bg.png
        newlogo.png
    )

if(APPLE)
    set(CHROMAFLOCK_FORMATS VST3 AU Standalone)
    set(CHROMAFLOCK_COPY TRUE)
    set(CHROMAFLOCK_AU_MAIN_TYPE AU_MAIN_TYPE kAudioUnitType_MusicDevice)
elseif(WIN32)
    set(CHROMAFLOCK_FORMATS VST3 Standalone)
    set(CHROMAFLOCK_COPY FALSE)
    set(CHROMAFLOCK_AU_MAIN_TYPE "")
else()
    set(CHROMAFLOCK_FORMATS VST3 Standalone)
    set(CHROMAFLOCK_COPY FALSE)
    set(CHROMAFLOCK_AU_MAIN_TYPE "")
endif()

juce_add_plugin(ChromaFlock
    COMPANY_NAME "ChromaFlock"
    PLUGIN_MANUFACTURER_CODE CFlk
    PLUGIN_CODE CFlk
    FORMATS ${CHROMAFLOCK_FORMATS}
    PRODUCT_NAME "ChromaFlock"
    IS_SYNTH TRUE
    NEEDS_MIDI_INPUT TRUE
    IS_MIDI_EFFECT FALSE
    EDITOR_WANTS_KEYBOARD_FOCUS FALSE
    COPY_PLUGIN_AFTER_BUILD ${CHROMAFLOCK_COPY}
    VST3_CATEGORIES Synth
    ${CHROMAFLOCK_AU_MAIN_TYPE}
    DESCRIPTION "Subtractive Synthesizer"
)

target_sources(ChromaFlock PRIVATE
    Source/PluginProcessor.cpp
    Source/PluginEditor.cpp
)

target_compile_definitions(ChromaFlock PUBLIC
    JUCE_VST3_CAN_REPLACE_VST2=0
    JUCE_WEB_BROWSER=0
    JUCE_USE_CURL=0
    JUCE_DISPLAY_SPLASH_SCREEN=0
    JUCE_PLUGIN_WANTS_MIDI=1
    JUCE_MODAL_LOOPS_PERMITTED=0
)

target_link_libraries(ChromaFlock PRIVATE
    ChromaFlockBinaryData
    juce::juce_audio_basics
    juce::juce_audio_devices
    juce::juce_audio_formats
    juce::juce_audio_plugin_client
    juce::juce_audio_processors
    juce::juce_audio_utils
    juce::juce_core
    juce::juce_data_structures
    juce::juce_dsp
    juce::juce_events
    juce::juce_graphics
    juce::juce_gui_basics
    juce::juce_gui_extra
)
