cmake_minimum_required(VERSION 3.20)
project(CommonwealthOnlineHost)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

find_package(Qt6 COMPONENTS
    Core
    Gui
    Widgets
    Network
    Concurrent
    REQUIRED
)

set(PROJECT_SOURCES
    src/main.cpp
    src/MainWindow.h
    src/MainWindow.cpp
    src/ConfigDialog.h
    src/ConfigDialog.cpp
    src/ServerProcess.h
    src/ServerProcess.cpp
    src/resources/resources.qrc
)

add_executable(CommonwealthOnlineHost ${PROJECT_SOURCES})

target_link_libraries(CommonwealthOnlineHost
    Qt6::Core
    Qt6::Gui
    Qt6::Widgets
    Qt6::Network
    Qt6::Concurrent
)

# Windows-specific settings
if(WIN32)
    set_target_properties(CommonwealthOnlineHost PROPERTIES
        WIN32_EXECUTABLE ON
        VS_DPI_AWARE "ON"
    )
endif()

# Set output directory
set_target_properties(CommonwealthOnlineHost PROPERTIES
    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)

# Stage the Python relay server next to the Host GUI executable so
# ServerProcess can find consumer_server_cli.py at runtime.
# Preserve a local commonwealth-server.json if the host already edited it.
set(CO_SERVER_SOURCE_DIR "${CMAKE_SOURCE_DIR}/server")
set(CO_SERVER_STAGE_DIR "$<TARGET_FILE_DIR:CommonwealthOnlineHost>/server")
set(CO_SERVER_STAGE_CONFIG "${CO_SERVER_STAGE_DIR}/commonwealth-server.json")
if(NOT EXISTS "${CO_SERVER_SOURCE_DIR}/consumer_server_cli.py")
    message(FATAL_ERROR
        "Bundled server source not found at ${CO_SERVER_SOURCE_DIR}/consumer_server_cli.py")
endif()
add_custom_command(TARGET CommonwealthOnlineHost POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E make_directory "${CO_SERVER_STAGE_DIR}"
    COMMAND ${CMAKE_COMMAND}
        -DCO_SERVER_SOURCE_DIR=${CO_SERVER_SOURCE_DIR}
        -DCO_SERVER_STAGE_DIR=${CO_SERVER_STAGE_DIR}
        -DCO_SERVER_STAGE_CONFIG=${CO_SERVER_STAGE_CONFIG}
        -P "${CMAKE_SOURCE_DIR}/cmake/stage_server.cmake"
    COMMENT "Copying Python server next to CommonwealthOnlineHost.exe"
)
