cmake_minimum_required(VERSION 3.15)

# Фикс для Ninja на Windows
if(NOT CMAKE_MAKE_PROGRAM AND WIN32)
    set(POTENTIAL_NINJA "${CMAKE_CURRENT_SOURCE_DIR}/ninja/ninja.exe")
    if(EXISTS "${POTENTIAL_NINJA}")
        set(CMAKE_MAKE_PROGRAM "${POTENTIAL_NINJA}" CACHE FILEPATH "Path to ninja" FORCE)
    endif()
endif()

project(space-game001 CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# --- АВТО-ЗАГРУЗКА ЗАВИСИМОСТЕЙ ---
include("${CMAKE_CURRENT_SOURCE_DIR}/../cmake/FetchDependencies.cmake")
# Теперь гарантированно есть папка ../thirdparty со всеми исходниками

# Список исходных файлов (без изменений)
set(SOURCES
    ../src/main.cpp
    ../src/Game.cpp
    ../src/Game.h
    ../src/Environment.cpp
    ../src/Environment.h
    ../src/render/Renderer.cpp
    ../src/render/Renderer.h
    ../src/render/ShaderManager.cpp
    ../src/render/ShaderManager.h
    ../src/render/TextureManager.cpp
    ../src/render/TextureManager.h
    ../src/TextModel.cpp
    ../src/TextModel.h
    ../src/AudioPlayerAsync.cpp
    ../src/AudioPlayerAsync.h
    ../src/BoneAnimatedModel.cpp
    ../src/BoneAnimatedModel.h
    ../src/render/OpenGlExtensions.cpp
    ../src/render/OpenGlExtensions.h
    ../src/utils/Utils.cpp
    ../src/utils/Utils.h
    ../src/SparkEmitter.cpp
    ../src/SparkEmitter.h
	../src/planet/PlanetObject.cpp
	../src/planet/PlanetObject.h
	../src/planet/PlanetData.cpp
	../src/planet/PlanetData.h
	../src/utils/Perlin.cpp
	../src/utils/Perlin.h
	../src/utils/TaskManager.cpp
	../src/utils/TaskManager.h
	../src/planet/StoneObject.cpp
	../src/planet/StoneObject.h
	../src/render/FrameBuffer.cpp
	../src/render/FrameBuffer.h
    ../src/UiManager.cpp
    ../src/UiManager.h
    ../src/Projectile.h
    ../src/Projectile.cpp
	../src/network/NetworkInterface.h
	../src/network/LocalClient.h
	../src/network/LocalClient.cpp
	../src/network/ClientState.h
	../src/network/ClientState.cpp
	../src/network/WebSocketClient.h
	../src/network/WebSocketClient.cpp
	../src/render/TextRenderer.h
	../src/render/TextRenderer.cpp
)

add_executable(space-game001 ${SOURCES})

# Настройка путей к инклудам (используем скачанные исходники)
target_include_directories(space-game001 PRIVATE
    ../src
    ../thirdparty/eigen-5.0.0
    ../thirdparty/boost_1_90_0
)

# Сборка libzip через add_subdirectory (Emscripten соберет её из исходников)
# Опции для либзипа, чтобы он не искал лишнего в системе
set(ENABLE_GNUTLS OFF CACHE BOOL "" FORCE)
set(ENABLE_OPENSSL OFF CACHE BOOL "" FORCE)
set(ENABLE_WINDOWS_CRYPTO OFF CACHE BOOL "" FORCE)
set(ENABLE_COMMONCRYPTO OFF CACHE BOOL "" FORCE)

add_subdirectory("../thirdparty/libzip-1.11.4" libzip-build)

# Линковка:
# 'zip' берется из add_subdirectory
# 'z' - это системный zlib Emscripten-а (флаг -sUSE_ZLIB=1 добавим ниже)
target_link_libraries(space-game001 PRIVATE zip z)

# Эмскриптен-флаги
set(EMSCRIPTEN_FLAGS
    "-sUSE_SDL=2"
    "-sUSE_SDL_IMAGE=2"
    "-sUSE_LIBPNG=1"
    "-sUSE_ZLIB=1"
    "-sUSE_SDL_TTF=2"
    "-pthread"
    "-sUSE_PTHREADS=1"
    "-fexceptions"
)

target_compile_options(space-game001 PRIVATE ${EMSCRIPTEN_FLAGS} "-O2")

set(EMSCRIPTEN_LINK_FLAGS
    ${EMSCRIPTEN_FLAGS}
    "-O2"
    "-sPTHREAD_POOL_SIZE=4"
    "-sALLOW_MEMORY_GROWTH=1"
    "--preload-file resources.zip"
)

# Применяем настройки линковки
target_link_options(space-game001 PRIVATE ${EMSCRIPTEN_LINK_FLAGS})

# Для совместимости со старыми версиями CMake, если target_link_options недостаточно
string(REPLACE ";" " " EMSCRIPTEN_LINK_FLAGS_STR "${EMSCRIPTEN_LINK_FLAGS}")
set_target_properties(space-game001 PROPERTIES 
    LINK_FLAGS "${EMSCRIPTEN_LINK_FLAGS_STR}"
    SUFFIX ".html"
)

# --- Ресурсы и Деплой (без изменений) ---
set(RESOURCES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../resources")
set(RESOURCES_ZIP "${CMAKE_CURRENT_BINARY_DIR}/resources.zip")
get_filename_component(RESOURCES_PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/.." ABSOLUTE)

add_custom_command(
    OUTPUT "${RESOURCES_ZIP}"
    COMMAND ${CMAKE_COMMAND} -E tar "cf" "${RESOURCES_ZIP}" --format=zip "resources"
    WORKING_DIRECTORY "${RESOURCES_PARENT_DIR}"
    DEPENDS "${RESOURCES_PARENT_DIR}/resources"
)

add_custom_target(pack_resources DEPENDS "${RESOURCES_ZIP}")
add_dependencies(space-game001 pack_resources)


# Определяем путь к директории установки (относительно папки билда)
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/public")

# 1. Устанавливаем основной HTML файл
install(TARGETS space-game001
        RUNTIME DESTINATION .
)

# 2. Устанавливаем сопутствующие файлы (JS, WASM и сгенерированный архив данных)
# Emscripten создает их в той же папке, что и таргет
install(FILES 
        "${CMAKE_CURRENT_BINARY_DIR}/space-game001.js"
        "${CMAKE_CURRENT_BINARY_DIR}/space-game001.wasm"
        "${CMAKE_CURRENT_BINARY_DIR}/space-game001.data"
        DESTINATION .
)

install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/space-game001plain.html" 
        DESTINATION .
)

# Если вам все еще нужен сам resources.zip отдельно в папке public:
#install(FILES "${RESOURCES_ZIP}" DESTINATION .)

add_custom_command(TARGET space-game001 POST_BUILD
    COMMAND ${CMAKE_COMMAND} --install .
    WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
    COMMENT "Automatically deploying to public directory..."
)
