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

# Setup
cmake_minimum_required(VERSION 3.13)
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules)

if(NOT DEFINED DAWN_TARGET_SYSTEM)
  set(DAWN_TARGET_SYSTEM "linux")
endif()

# Prep cache
set(DAWN_CACHE_TARGET "dawn-target")

# Build variables
set(DAWN_ROOT_DIR "${CMAKE_SOURCE_DIR}")
set(DAWN_BUILD_DIR "${CMAKE_BINARY_DIR}")
set(DAWN_SOURCES_DIR "${DAWN_ROOT_DIR}/src")
set(DAWN_TEMP_DIR "${DAWN_BUILD_DIR}/temp")
set(DAWN_TOOLS_DIR "${DAWN_ROOT_DIR}/tools")
set(DAWN_DATA_DIR "${DAWN_ROOT_DIR}/data")
set(DAWN_ASSETS_DIR "${DAWN_ROOT_DIR}/assets")
set(DAWN_BUILT_ASSETS_DIR "${DAWN_BUILD_DIR}/built_assets" CACHE INTERNAL ${DAWN_CACHE_TARGET})
set(DAWN_GENERATED_HEADERS_DIR "${DAWN_BUILD_DIR}/generated")
set(DAWN_TARGET_NAME "Dawn" CACHE INTERNAL ${DAWN_CACHE_TARGET})
set(DAWN_BUILD_BINARY ${DAWN_BUILD_DIR}/Dawn CACHE INTERNAL ${DAWN_CACHE_TARGET})
set(DAWN_ASSETS "" CACHE INTERNAL ${DAWN_CACHE_TARGET})

# Create directories
file(MAKE_DIRECTORY ${DAWN_GENERATED_HEADERS_DIR})

# Find packages
find_package(Python3 COMPONENTS Interpreter REQUIRED)

# Toolchains
if(DAWN_TARGET_SYSTEM STREQUAL "psp")
  find_package(pspsdk REQUIRED)
endif()

# Init Project
project(${DAWN_TARGET_NAME}
  VERSION 1.0.0
  LANGUAGES C CXX
)

# Executable
add_executable(${DAWN_TARGET_NAME})

# Add tools
# add_subdirectory(tools)

# Assets
# add_subdirectory(assets)

# Add libraries
if(DAWN_TARGET_SYSTEM STREQUAL "linux")
  find_package(SDL2 REQUIRED)
  find_package(OpenGL REQUIRED)
  target_link_libraries(${DAWN_TARGET_NAME}
    PRIVATE 
      SDL2
      OpenGL::GL
      GL
  )

elseif(DAWN_TARGET_SYSTEM STREQUAL "psp")
  find_package(SDL2 REQUIRED)
  find_package(OpenGL REQUIRED)
  target_link_libraries(${DAWN_TARGET_NAME}
    PUBLIC
      ${SDL2_LIBRARIES}
      SDL2
      OpenGL::GL
      zip
      bz2
      z
      mbedtls
      mbedcrypto
      lzma
  )
  target_include_directories(${DAWN_TARGET_NAME} PRIVATE
    ${SDL2_INCLUDE_DIRS}
  )
endif()

# Add code
add_subdirectory(src)

# Include generated headers
target_include_directories(${DAWN_TARGET_NAME} PUBLIC
  ${DAWN_GENERATED_HEADERS_DIR}
)

# # Build assets
# add_custom_target(DAWN_ASSETS_BUILT ALL
#   COMMAND
#     ${Python3_EXECUTABLE} ${DAWN_TOOLS_DIR}/assetstool/main.py
#       --assets ${DAWN_ASSETS_DIR}
#       --build-type wad
#       --output-assets ${DAWN_BUILT_ASSETS_DIR}
#       --output-file ${DAWN_BUILD_DIR}/dusk.dsk
#       --output-headers ${DAWN_GENERATED_HEADERS_DIR}/asset/assetbundle.h
#       --headers-dir ${DAWN_GENERATED_HEADERS_DIR}
#       --input ${DAWN_ASSETS}
# )
# add_dependencies(${DAWN_TARGET_NAME} DAWN_ASSETS_BUILT)

# # Postbuild
# if(DAWN_TARGET_SYSTEM STREQUAL "psp")
#   create_pbp_file(
#     TARGET "${DAWN_TARGET_NAME}"
#     ICON_PATH NULL
#     BACKGROUND_PATH NULL
#     PREVIEW_PATH NULL
#     TITLE "${DAWN_TARGET_NAME}"
#     VERSION 01.00
#   )
# endif()