cmake_minimum_required(VERSION 3.10)

# set the project name
set (ProjectName HelloWorld)
set (Version 1.0.0)

project(${ProjectName} VERSION ${Version})

set (DAEMON ${PROJECT_SOURCE_DIR}/../../daemon)
set (JPL_FILE_NAME ${ProjectName}.jpl)
set (DAEMON_SRC ${DAEMON}/src)
set (CONTRIB_PATH ${DAEMON}/contrib)
set (PLUGINS_LIB ${PROJECT_SOURCE_DIR}/../lib)
set (JPL_DIRECTORY ${PROJECT_BINARY_DIR}/jpl)
set (LIBS_DIR ${PROJECT_SOURCE_DIR}/../contrib/Libs)

if(WIN32)
    message(OS:\  WINDOWS\ ${CMAKE_SYSTEM_PROCESSOR})
    if (NOT ${CMAKE_CL_64})
        message( FATAL_ERROR "\nUse CMake only for x64 Windows" )
    endif()
    set (CONTRIB_PLATFORM_CURT x64)
    set (CONTRIB_PLATFORM ${CONTRIB_PLATFORM_CURT}-windows)
    set (LIBRARY_FILE_NAME ${ProjectName}.dll)
    set (FFMPEG ${CONTRIB_PATH}/build/ffmpeg/Build/win32/x64)
else()
    message( FATAL_ERROR "\nUse CMake only for Windows! For linux or Android (linux host), use our bash scripts." )
endif()

message(Building:\   ${ProjectName}\   ${Version})
message(Build\ path:\ ${PROJECT_BINARY_DIR})
message(JPL\ assembling\ path:\ ${JPL_DIRECTORY})
message(JPL\ path:\ ${JPL_DIRECTORY}/../../../build/${ProjectName}/${JPL_FILE_NAME})

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")

set(plugin_SRC CoinCircleMediaHandler.cpp
               CenterCircleVideoSubscriber.cpp
               CenterCircleMediaHandler.cpp
               CoinCircleVideoSubscriber.cpp
               main.cpp
               ../lib/accel.cpp
               )

set(plugin_HDR CoinCircleVideoSubscriber.h
               CenterCircleVideoSubscriber.h
               CoinCircleMediaHandler.h
               CenterCircleMediaHandler.h
               ../lib/accel.h
               ../lib/framescaler.h
               ../lib/pluglog.h
               )

add_library(${ProjectName} SHARED ${plugin_SRC}
                                  ${plugin_HDR}
                                  )

target_include_directories(${ProjectName} PUBLIC ${PROJECT_BINARY_DIR}
                                                 ${PROJECT_SOURCE_DIR}
                                                 ${PLUGINS_LIB}
                                                 ${DAEMON_SRC}
                                                 ${CONTRIB_PATH}
                                                 ${FFMPEG}/include
                                                 ${CONTRIB_PATH}/build/opencv/build/install/include
                                                 )
target_link_directories(${ProjectName} PUBLIC ${CONTRIB_PATH}
                                        ${FFMPEG}/bin
                                        ${CONTRIB_PATH}/build/opencv/build/lib/Release
                                        ${CONTRIB_PATH}/build/opencv/build/3rdparty/lib/Release
                                        )

target_link_libraries(${ProjectName} PUBLIC swscale avutil opencv_imgproc411 opencv_core411 zlib)

add_custom_command(
    TARGET ${ProjectName}
    PRE_BUILD
    COMMAND python3 ${PROJECT_SOURCE_DIR}/../SDK/jplManipulation.py --preassemble --plugin=${ProjectName}
    COMMENT "Assembling Plugin files"
)

add_custom_command(
    TARGET ${ProjectName}
    POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/Release/${ProjectName}.lib ${JPL_DIRECTORY}/lib/${CONTRIB_PLATFORM}
    COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/Release/${LIBRARY_FILE_NAME} ${JPL_DIRECTORY}/lib/${CONTRIB_PLATFORM}
    COMMAND python3 ${PROJECT_SOURCE_DIR}/../SDK/jplManipulation.py --assemble --plugin=${ProjectName}
    COMMENT "Generating JPL archive"
)
