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

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Locate JUCE: prefer an explicit TERION_JUCE_DIR, then ~/JUCE,
# ~/.local/git/juce, ~/.local/git/JUCE, then the vendored copy at
# third_party/JUCE (populated by `make juce`).
if(TERION_JUCE_DIR)
    set(JUCE_DIR_SELECTED "${TERION_JUCE_DIR}")
elseif(EXISTS "$ENV{HOME}/JUCE/CMakeLists.txt")
    set(JUCE_DIR_SELECTED "$ENV{HOME}/JUCE")
elseif(EXISTS "$ENV{HOME}/.local/git/juce/CMakeLists.txt")
    set(JUCE_DIR_SELECTED "$ENV{HOME}/.local/git/juce")
elseif(EXISTS "$ENV{HOME}/.local/git/JUCE/CMakeLists.txt")
    set(JUCE_DIR_SELECTED "$ENV{HOME}/.local/git/JUCE")
elseif(EXISTS "${CMAKE_SOURCE_DIR}/third_party/JUCE/CMakeLists.txt")
    set(JUCE_DIR_SELECTED "${CMAKE_SOURCE_DIR}/third_party/JUCE")
else()
    message(FATAL_ERROR "JUCE not found. Run 'make juce' to clone it into third_party/JUCE, "
                        "or pass -DTERION_JUCE_DIR=/path/to/JUCE.")
endif()
message(STATUS "Using JUCE at: ${JUCE_DIR_SELECTED}")

# Git version info
execute_process(
    COMMAND git log -1 --format=%h
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
    OUTPUT_VARIABLE GIT_HASH
    OUTPUT_STRIP_TRAILING_WHITESPACE
    ERROR_QUIET
)
if(NOT GIT_HASH)
    set(GIT_HASH "unknown")
endif()

execute_process(
    COMMAND git rev-list --count HEAD
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
    OUTPUT_VARIABLE GIT_LOCAL_COMMITS
    OUTPUT_STRIP_TRAILING_WHITESPACE
    ERROR_QUIET
)
if(NOT GIT_LOCAL_COMMITS)
    set(GIT_LOCAL_COMMITS "0")
endif()

string(TIMESTAMP BUILD_TIME "%Y-%m-%d %H:%M:%S")

configure_file(
    ${CMAKE_SOURCE_DIR}/Source/Version.h.in
    ${CMAKE_BINARY_DIR}/Version.h
    @ONLY
)

add_subdirectory("${JUCE_DIR_SELECTED}" "${CMAKE_BINARY_DIR}/JUCE")

juce_add_plugin(Terion
    PRODUCT_NAME "Terion"
    COMPANY_NAME "Terion"
    BUNDLE_ID "com.terion.stereo-analyzer"
    PLUGIN_MANUFACTURER_CODE Teri
    PLUGIN_CODE TeAn
    FORMATS VST3 AU
    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
    VST3_CATEGORIES Analyzer
)

target_sources(Terion PRIVATE
    Source/PluginProcessor.cpp
    Source/PluginEditor.cpp
    Source/VectorScope.cpp
    Source/ArcKnob.cpp
)

target_compile_definitions(Terion PUBLIC
    JUCE_WEB_BROWSER=0
    JUCE_USE_CURL=0
    JUCE_VST3_CAN_REPLACE_VST2=0
)

target_link_libraries(Terion PRIVATE
    juce::juce_audio_utils
    juce::juce_dsp
    juce::juce_opengl
    juce::juce_graphics
    juce::juce_gui_basics
    juce::juce_gui_extra
)

target_include_directories(Terion PRIVATE ${CMAKE_BINARY_DIR})
