cmake_minimum_required(VERSION 3.22)

project(RefMatchPlugin VERSION 0.1.0 LANGUAGES CXX C)

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

# JUCE setup:
# 1) Preferred: install JUCE CMake package and let find_package discover it
#    (e.g. via -DCMAKE_PREFIX_PATH or -DJUCE_DIR=<path-to-JUCEConfig.cmake-dir>).
# 2) Fallback: point JUCE_DIR at a JUCE source checkout (contains CMakeLists.txt):
#    cmake -S plugin -B plugin/build -DJUCE_DIR=/path/to/JUCE
# If JUCE_DIR is not provided, this uses $ENV{JUCE_DIR} or ./JUCE.
set(_juce_dir_default "${CMAKE_CURRENT_SOURCE_DIR}/JUCE")
if (DEFINED ENV{JUCE_DIR} AND NOT "$ENV{JUCE_DIR}" STREQUAL "")
    set(_juce_dir_default "$ENV{JUCE_DIR}")
endif()

set(JUCE_DIR "${_juce_dir_default}" CACHE PATH
    "Path to JUCE source root or JUCEConfig.cmake directory")

set(_juce_source_dir "${JUCE_DIR}")
find_package(JUCE CONFIG QUIET)

if (NOT JUCE_FOUND)
    if (EXISTS "${_juce_source_dir}/CMakeLists.txt")
        add_subdirectory("${_juce_source_dir}" "${CMAKE_CURRENT_BINARY_DIR}/JUCE")
    else()
        message(FATAL_ERROR
            "JUCE not found. Set JUCE_DIR to a JUCE source checkout (contains CMakeLists.txt), "
            "or configure CMAKE_PREFIX_PATH/JUCE_DIR so find_package(JUCE CONFIG) can locate JUCE.")
    endif()
endif()

juce_add_plugin(RefMatchPlugin
    BUNDLE_ID com.refmatch.plugin
    COMPANY_NAME RefMatch
    IS_SYNTH FALSE
    NEEDS_MIDI_INPUT FALSE
    NEEDS_MIDI_OUTPUT FALSE
    IS_MIDI_EFFECT FALSE
    EDITOR_WANTS_KEYBOARD_FOCUS FALSE
    COPY_PLUGIN_AFTER_BUILD TRUE
    PLUGIN_MANUFACTURER_CODE RfMt
    PLUGIN_CODE RfM1
    FORMATS VST3 AU
    PRODUCT_NAME "RefMatch"
)

target_sources(RefMatchPlugin
    PRIVATE
        src/HttpClient.cpp
        src/PluginEditor.cpp
        src/PluginProcessor.cpp
)

target_include_directories(RefMatchPlugin PRIVATE src)

target_compile_definitions(RefMatchPlugin
    PRIVATE
        JUCE_WEB_BROWSER=0
        JUCE_VST3_CAN_REPLACE_VST2=0
)

target_link_libraries(RefMatchPlugin
    PRIVATE
        juce::juce_audio_formats
        juce::juce_audio_utils
        juce::juce_dsp
        juce::juce_gui_extra
)

juce_generate_juce_header(RefMatchPlugin)
