cmake_minimum_required(VERSION 3.15)

project(DRUMLABOOH LANGUAGES CXX C VERSION 12.1.0)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# ========== ОПЦИИ КОНФИГУРАЦИИ ==========
option(MULTI "Build with multi-channel support" ON)
option(INSTALLKITS "Bundle and install kits" OFF)

message(STATUS "Building AU plugin for macOS")

add_definitions(-DVERSION_NUMBER="${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")

# ========== macOS НАСТРОЙКИ ==========
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15")
set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64")

set(JUCETAG "8.0.11")

# ========== ЗАВИСИМОСТИ ==========
set(FETCHCONTENT_QUIET FALSE)
cmake_policy(SET CMP0135 NEW)

FetchContent_Declare(
    juce
    URL https://github.com/juce-framework/JUCE/archive/refs/tags/${JUCETAG}.tar.gz
    EXCLUDE_FROM_ALL
)

FetchContent_MakeAvailable(juce)

# ========== ФУНКЦИЯ ДЛЯ СОЗДАНИЯ ПЛАГИНА ==========
function(create_drumlabooh_plugin target_name is_multi)
    message(STATUS "Creating AU plugin: ${target_name} (multi: ${is_multi})")

    juce_add_plugin(${target_name}
        COMPANY_NAME "Semiletov"
        IS_SYNTH TRUE
        NEEDS_MIDI_INPUT TRUE
        EDITOR_WANTS_KEYBOARD_FOCUS TRUE
        VST3_CATEGORIES "Instrument|Sampler|Synth|Drum|Generator"
        PLUGIN_MANUFACTURER_CODE "PetR"
        PLUGIN_CODE "Petr"
        FORMATS AU  # ТОЛЬКО AU для macOS
        PRODUCT_NAME "${target_name}"
        NEEDS_WEB_BROWSER FALSE
        JUCE_DISPLAY_SPLASH_SCREEN FALSE
        AU_MAIN_TYPE kAudioUnitType_MusicDevice
        COPY_PLUGIN_AFTER_BUILD TRUE
    )

    # Указываем явно путь для артефактов
    set_target_properties(${target_name} PROPERTIES
        MACOSX_BUNDLE ON
        MACOSX_BUNDLE_BUNDLE_NAME "${target_name}"
        MACOSX_BUNDLE_BUNDLE_VERSION "${PROJECT_VERSION}"
        MACOSX_BUNDLE_SHORT_VERSION_STRING "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}"
    )

    juce_generate_juce_header(${target_name})

    target_sources(${target_name}
        PRIVATE
            ./Source/PluginEditor.cpp
            ./Source/PluginProcessor.cpp
            ./Source/pugixml.cpp
            ./Source/dsp.cpp
            ./Source/kits.cpp
            ./Source/utl.cpp
            ./Source/fx-resofilter.cpp
            ./Source/resampler.c
    )

    target_compile_definitions(${target_name}
        PUBLIC
            JUCE_JACK=0
            NEEDS_WEBVIEW2=0
            JUCE_PLUGINHOST_LADSPA=0
            JUCE_WEB_BROWSER=0
            JUCE_USE_CURL=0
            JUCE_VST3_CAN_REPLACE_VST2=0
            VERSION_NUMBER="${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}"
            JUCE_PUSH_NOTIFICATIONS=0
            JUCE_MODAL_LOOPS_PERMITTED=1
            JUCE_STRICT_REFCOUNTEDPOINTER=1
    )

    if(${is_multi})
        target_compile_definitions(${target_name} PUBLIC MULTICHANNEL=1)
    endif()

    # ИСПРАВЛЕННАЯ ЛИНКОВКА - используем juce_audio_plugin_client для AU
    target_link_libraries(${target_name}
        PRIVATE
            juce::juce_audio_basics
            juce::juce_audio_devices
            juce::juce_audio_formats
            juce::juce_audio_processors
            juce::juce_audio_utils
            juce::juce_audio_plugin_client  # ← ИСПРАВЛЕНО: убрали _AAX
            juce::juce_core
            juce::juce_data_structures
            juce::juce_events
            juce::juce_graphics
            juce::juce_gui_basics
            juce::juce_gui_extra
        PUBLIC
            juce::juce_recommended_config_flags
            juce::juce_recommended_lto_flags
            juce::juce_recommended_warning_flags
    )

endfunction()

# ========== СОЗДАНИЕ ПЛАГИНОВ ==========
create_drumlabooh_plugin(drumlabooh FALSE)

if(MULTI)
    create_drumlabooh_plugin(drumlabooh-multi TRUE)
endif()

# ========== НАСТРОЙКА ПУТЕЙ АРТЕФАКТОВ ==========
set(JUCE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}_artefacts" CACHE PATH "Directory for JUCE plugin artefacts")

message(STATUS "==========================================")
message(STATUS "macOS AU Plugin Configuration")
message(STATUS "Deployment target: ${CMAKE_OSX_DEPLOYMENT_TARGET}")
message(STATUS "Architectures: ${CMAKE_OSX_ARCHITECTURES}")
message(STATUS "JUCE version: ${JUCETAG}")
message(STATUS "Multi-channel: ${MULTI}")
message(STATUS "Artefacts directory: ${JUCE_OUTPUT_DIRECTORY}")
message(STATUS "==========================================")