# Copyright (c) 2021 Dominic Msters
# 
# This software is released under the MIT License.
# https://opensource.org/licenses/MIT

# Set up the base CMake stuff.
cmake_minimum_required(VERSION 3.13)
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED ON)

# Set some global flags
add_compile_definitions(
  _CRT_SECURE_NO_WARNINGS=1
  ASSET_PREFIX="../assets/"
)

# Do initial set up depending on the build target type.
if(TARGET_TYPE STREQUAL test)
  set(TARGET_NAME test)
elseif(TARGET_TYPE STREQUAL game)
  set(TARGET_NAME ${TARGET_GAME})
else()
  message(FATAL_ERROR "Missing or invalid definition of TARGET_TYPE")
endif()

# Set up the project
project(${TARGET_NAME} VERSION 1.0)
add_executable(${PROJECT_NAME})

# Variables
set(ROOT_DIR "${CMAKE_SOURCE_DIR}")
set(TOOLS_DIR "${ROOT_DIR}/tools")
set(ASSETS_DIR "assets")
set(TEMP_DIR "temp")

# Include tools
add_subdirectory(tools)

# Now change sources depending on the target type
if(TARGET_TYPE STREQUAL test)
  add_subdirectory(test)
elseif(TARGET_TYPE STREQUAL game)
  # Set up shared assets

  # Shaders
  tool_copy(shader_textured
    shared/shaders/textured.vert shaders/textured.vert
    shared/shaders/textured.frag shaders/textured.frag
  )

  # Fonts
  tool_copy(font_opensans
    shared/fonts/opensans/OpenSans-Regular.ttf fonts/opensans/OpenSans-Regular.ttf
    shared/fonts/opensans/OpenSans-Bold.ttf fonts/opensans/OpenSans-Bold.ttf
  )

  # Textures
  tool_copy(texture_test
    shared/textures/test_texture.png textures/test_texture.png
  )

  # Locales
  tool_copy(locale_en
    locale/language/en-US.csv locale/language/en-US.csv
  )

  # Poker Game
  if(TARGET_GAME STREQUAL poker)
    add_compile_definitions(
      GAME_NAME="Penny's Poker"
      GAME_FILE="poker/game.h"
      GAME_TYPE=pokergame_t
      GAME_INIT=pokerGameInit
      GAME_UPDATE=pokerGameUpdate
      GAME_DISPOSE=pokerGameDispose
      GAME_VERSION=1.0
    )
    
    
    # Characters
    set(DIR_CHARS poker/characters)
    tool_vn_character(vn_penny
      ${DIR_CHARS}/penny/character.xml ${DIR_CHARS}/penny.png
    )
    tool_vn_character(vn_lucy
      ${DIR_CHARS}/lucy/character.xml ${DIR_CHARS}/lucy.png
    )
    tool_vn_character(vn_julie
      ${DIR_CHARS}/julie/character.xml ${DIR_CHARS}/julie.png
    )
    tool_vn_character(vn_sammy
      ${DIR_CHARS}/sammy/character.xml ${DIR_CHARS}/sammy.png
    )
    tool_vn_character(vn_jenny
      ${DIR_CHARS}/jenny/character.xml ${DIR_CHARS}/jenny.png
    )

    # World
    tool_copy(texture_pub
      poker/world/pub/pub_skywall.png poker/pub_skywall.png
    )
    tool_copy(texture_cards
      poker/cards_normal.png poker/cards.png
    )

    tool_assets(
      shader_textured
      font_opensans
      texture_test

      vn_penny
      vn_lucy
      vn_julie
      vn_sammy
      
      texture_pub
      texture_cards

      locale_en
    )
  endif()

  # Common Game Dependencies.
  add_dependencies(${PROJECT_NAME} assets)
  add_subdirectory(client)
endif()

# Add global sources.
add_subdirectory(lib)
add_subdirectory(src)