set(VSTGUI_BASEDIR "${CMAKE_CURRENT_SOURCE_DIR}/external/vstgui4")
include("cmake/Vstgui.cmake")

set(EDITOR_RESOURCES
    logo.png
    logo_text.png
    logo_text_white.png
    logo_text_shaded.png
    logo_text@2x.png
    logo_text_white@2x.png
    logo_text_shaded@2x.png
    background.png
    background@2x.png
    icon_white.png
    icon_white@2x.png
    knob48.png
    knob48@2x.png
    Fonts/sfizz-fluentui-system-r20.ttf
    Fonts/sfizz-fluentui-system-f20.ttf
    Fonts/Roboto-Regular.ttf
    PARENT_SCOPE)

function(copy_editor_resources SOURCE_DIR DESTINATION_DIR)
    foreach(res ${EDITOR_RESOURCES})
        get_filename_component(_dir "${res}" DIRECTORY)
        file(MAKE_DIRECTORY "${DESTINATION_DIR}/${_dir}")
        file(COPY "${SOURCE_DIR}/${res}" DESTINATION "${DESTINATION_DIR}/${_dir}")
    endforeach()
endfunction()

# editor
add_library(sfizz_editor STATIC EXCLUDE_FROM_ALL
    src/editor/EditIds.h
    src/editor/EditIds.cpp
    src/editor/Editor.h
    src/editor/Editor.cpp
    src/editor/EditorLibs.h
    src/editor/EditorLibs.cpp
    src/editor/EditorController.h
    src/editor/GUIComponents.h
    src/editor/GUIComponents.cpp
    src/editor/GUIHelpers.h
    src/editor/GUIHelpers.cpp
    src/editor/GUIPiano.h
    src/editor/GUIPiano.cpp
    src/editor/ColorHelpers.h
    src/editor/ColorHelpers.cpp
    src/editor/ImageHelpers.h
    src/editor/ImageHelpers.cpp
    src/editor/NativeHelpers.h
    src/editor/NativeHelpers.cpp
    src/editor/layout/main.hpp
    src/editor/utility/vstgui_after.h
    src/editor/utility/vstgui_before.h
    src/editor/GitBuildId.h
    "${CMAKE_CURRENT_BINARY_DIR}/git-build-id/GitBuildId.c")
add_library(sfizz::editor ALIAS sfizz_editor)
target_include_directories(sfizz_editor PUBLIC "src")
target_link_libraries(sfizz_editor PUBLIC sfizz::messaging sfizz::plugins-common)
target_link_libraries(sfizz_editor PRIVATE sfizz::vstgui)
if(APPLE)
    find_library(APPLE_APPKIT_LIBRARY "AppKit")
    find_library(APPLE_CORESERVICES_LIBRARY "CoreServices")
    find_library(APPLE_FOUNDATION_LIBRARY "Foundation")
    target_sources(sfizz_editor PRIVATE
        src/editor/NativeHelpers.mm)
    target_link_libraries(sfizz_editor PRIVATE
        "${APPLE_APPKIT_LIBRARY}"
        "${APPLE_CORESERVICES_LIBRARY}"
        "${APPLE_FOUNDATION_LIBRARY}")
    target_compile_options(sfizz_editor PRIVATE "-fobjc-arc")
endif()

# dependencies
add_library(sfizz_colorspaces INTERFACE)
add_library(sfizz::colorspaces ALIAS sfizz_colorspaces)
target_include_directories(sfizz_colorspaces INTERFACE "external/color-spaces")

add_library(sfizz_stb_image INTERFACE)
add_library(sfizz::stb_image ALIAS sfizz_stb_image)
target_include_directories(sfizz_stb_image INTERFACE "external/stb_image")

if(WIN32)
    #
elseif(APPLE)
    #
else()
    find_package(PkgConfig REQUIRED)
    pkg_check_modules(sfizz-gio "gio-2.0" REQUIRED)
    target_include_directories(sfizz_editor PRIVATE ${sfizz-gio_INCLUDE_DIRS})
    target_link_libraries(sfizz_editor PRIVATE ${sfizz-gio_LIBRARIES})
endif()
target_link_libraries(sfizz_editor PRIVATE sfizz::colorspaces sfizz::stb_image sfizz::bit_array sfizz::filesystem)

# layout tool
if(NOT CMAKE_CROSSCOMPILING)
    add_executable(layout-maker
        "tools/layout-maker/sources/layout.h"
        "tools/layout-maker/sources/reader.cpp"
        "tools/layout-maker/sources/reader.h"
        "tools/layout-maker/sources/main.cpp")
    target_link_libraries(layout-maker PRIVATE absl::strings)

    add_custom_command(
        OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/src/editor/layout/main.hpp"
        COMMAND "$<TARGET_FILE:layout-maker>"
        "${CMAKE_CURRENT_SOURCE_DIR}/layout/main.fl"
        > "${CMAKE_CURRENT_SOURCE_DIR}/src/editor/layout/main.hpp"
        DEPENDS layout-maker "${CMAKE_CURRENT_SOURCE_DIR}/layout/main.fl")
endif()

# git build identifier
add_custom_target(sfizz_editor_git_build_id
    COMMAND "${CMAKE_COMMAND}"
            "-DSOURCE_DIR=${PROJECT_SOURCE_DIR}"
            "-DOUTPUT_FILE=${CMAKE_CURRENT_BINARY_DIR}/git-build-id/GitBuildId.c"
            "-P" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/GitBuildID.cmake"
    BYPRODUCTS "git-build-id/GitBuildId.c")
add_dependencies(sfizz_editor sfizz_editor_git_build_id)
