name: CMake

on:
  workflow_call:
    inputs:
      build_type:
        # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
        description: Type of build (Debug, Release, RelWithDebInfo, MinSizeRel)
        type: string
        default: Debug
      upload_artifacts:
        description: Should upload artifacts or not
        type: boolean
        default: false
      run_tests:
        description: Run CTest after project build
        type: boolean
        default: false

jobs:
  build:
    # The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac.
    # You can convert this to a matrix build if you need cross-platform coverage.
    # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
    strategy:
      matrix:
        include:
          - os: ubuntu-latest

    runs-on: ${{ matrix.os }}

    steps:
    - uses: actions/checkout@v4

    - name: Install packages
    # If libluajit-5.1-dev is not available, use this:
    #   git clone https://luajit.org/git/luajit.git
    #   cd luajit
    #   make && make install INSTALL_INC=/usr/include/lua
      run: |
          sudo apt-get update
          sudo apt-get install libglfw3-dev libglfw3 libglew-dev libglm-dev libpng-dev libopenal-dev libluajit-5.1-dev libvorbis-dev libgtest-dev libcurl4-openssl-dev
          # fix luajit paths
          sudo ln -s /usr/lib/x86_64-linux-gnu/libluajit-5.1.a /usr/lib/x86_64-linux-gnu/liblua-5.1.a
          sudo ln -s /usr/include/luajit-2.1 /usr/include/lua
          # install EnTT
          git clone https://github.com/skypjack/entt.git
          cd entt/build
          cmake -DCMAKE_BUILD_TYPE=Release ..
          sudo make install
          cd ../..

    - name: Configure CMake
      # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only
      # required if you are using a single-configuration generator such as
      # make.
      #
      # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
      run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{inputs.build_type}} -DVOXELENGINE_BUILD_TESTS=ON

    - name: Build
      # Build your program with the given configuration
      run: |
        cmake --build ${{github.workspace}}/build --config ${{inputs.build_type}}
        mv ${{github.workspace}}/build/VoxelEngine VoxelEngine
    - name: Run tests
      if: ${{ inputs.run_tests }}
      run: ctest --test-dir ${{github.workspace}}/build
    - name: Upload artifacts
      if: ${{ inputs.upload_artifacts }}
      uses: actions/upload-artifact@v4
      with:
        name: VoxelEngine
        path: |
          VoxelEngine
          res/*
