cmake_minimum_required(VERSION 3.16)
project(Letnik3Zadnja)

set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

option(FETCH "Fetch SDL dependencies instead of using system-installed packages" OFF)

# Compile flags
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror -Wno-unused-parameter -O2")

# Collect all source files from src/ and nested directories
file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS "src/*.cpp")

# Create the executable
add_executable(${PROJECT_NAME} ${SOURCES})

# Include headers from include/
target_include_directories(${PROJECT_NAME} PRIVATE include)

# ------------------------------------------------------------
# Dependency handling
# ------------------------------------------------------------

if(FETCH OR WIN32)

    # Include FetchContent to download SDL libraries
    include(FetchContent)

    # Download SDL3
    FetchContent_Declare(
        SDL3
        GIT_REPOSITORY https://github.com/libsdl-org/SDL.git
        GIT_TAG release-3.4.2
    )

    # Download SDL3_image
    FetchContent_Declare(
        SDL3_image
        GIT_REPOSITORY https://github.com/libsdl-org/SDL_image.git
        GIT_TAG release-3.2.4
    )

    # Download SDL3_ttf
    FetchContent_Declare(
        SDL3_ttf
        GIT_REPOSITORY https://github.com/libsdl-org/SDL_ttf.git
        GIT_TAG release-3.2.2
    )

    # Download SDL3_mixer
    FetchContent_Declare(
        SDL3_mixer
        GIT_REPOSITORY https://github.com/libsdl-org/SDL_mixer.git
        GIT_TAG release-3.2.0
    )

    # Disable PipeWire backend (Linux-only but harmless here)
    set(SDL_PIPEWIRE OFF CACHE BOOL "Disable SDL PipeWire backend" FORCE)
    set(SDL_PIPEWIRE_SHARED OFF CACHE BOOL "Disable dynamic PipeWire loading in SDL" FORCE)

    # Make SDL libraries available
    FetchContent_MakeAvailable(SDL3)
    FetchContent_MakeAvailable(SDL3_image)
    FetchContent_MakeAvailable(SDL3_ttf)
    FetchContent_MakeAvailable(SDL3_mixer)

else()

    # macOS / Linux → use system-installed packages
    find_package(SDL3 REQUIRED)
    find_package(SDL3_image REQUIRED)
    find_package(SDL3_ttf REQUIRED)
    find_package(SDL3_mixer REQUIRED)

endif()

# ------------------------------------------------------------
# Link SDL libraries
# ------------------------------------------------------------

target_link_libraries(${PROJECT_NAME}
    PRIVATE
    SDL3::SDL3
    SDL3_image::SDL3_image
    SDL3_ttf::SDL3_ttf
    SDL3_mixer::SDL3_mixer
)